Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我希望在python中有多个指向同一内存的列表_Python_List - Fatal编程技术网

我希望在python中有多个指向同一内存的列表

我希望在python中有多个指向同一内存的列表,python,list,Python,List,我知道这不起作用,但它说明了我的目标。如果我有一个列表C,设置a=C,那么它们指向同一个对象,这就是我想要的。但是如果我将A设置为C的子集,那么它将创建一个新列表。我不想那样。我希望它指向相同的数据。例如: C = [1,2,3,4,5,6] A = C[3:6] C[4] = 9 print(C) print(A) 我想看看[4,9,6]的一个Python列表并没有这样做。这是我们应该做的事情: 如果每个元素也是列表或任何可变对象,则可以使用Python列表执行此操作: >>&g

我知道这不起作用,但它说明了我的目标。如果我有一个列表C,设置a=C,那么它们指向同一个对象,这就是我想要的。但是如果我将A设置为C的子集,那么它将创建一个新列表。我不想那样。我希望它指向相同的数据。例如:

C = [1,2,3,4,5,6]
A = C[3:6]
C[4] = 9
print(C)
print(A)

我想看看[4,9,6]的一个

Python列表并没有这样做。这是我们应该做的事情:

如果每个元素也是列表或任何可变对象,则可以使用Python列表执行此操作:

>>> c = [[1], [2], [3], [4], [5], [6]]  # list of lists
>>> a = c[3:6]
>>> a
[[4], [5], [6]]
>>> c[4].append(9)
>>> c
[[1], [2], [3], [4], [5, 9], [6]]
>>> a  # has also changed
[[4], [5, 9], [6]]
>>> c[4].pop(0)  # remove the first element of c[4]
5
>>> a
[[4], [9], [6]]
>>>
但是您不能“覆盖”c[4]的值,只能更改它。因此,仅适用于自身正在更改的可变对象

>>> c[4] = 0
>>> c
[[1], [2], [3], [4], 0, [6]]
>>> a  # does not have the 0, retains previous value
[[4], [9], [6]]
>>>

列表不支持这一点。不管怎么说,它与调整大小和元素移动都不能很好地相互作用。您对此有实际的用例吗?这听起来像是个坏主意,即使Python支持它。发生的情况是C[4]=9,其列表中的一个引用发生了变化。但是,列表A的引用不会更改,因此它具有旧值。这听起来像是一个X-Y问题:您认为这是(将是)解决方案的真正问题是什么?我不应该包含解决方案必须是列表的约束。numpy数组正是我想要的,这就是我要实现的。感谢您了解我的想法。事实上,如果您没有指定“列表”并说一些含糊不清的话,比如“ordered iterable container type where the slices only return views”,我在关闭选项卡之前不会想到numpy选项:-)一个可能的替代解决方案是编写自己的“ordered iterable container type,其中切片仅返回视图”。但要正确执行此操作需要付出更多的努力。(提示:当参数为切片时,请返回代理/视图。)此外,这里的PPL通常不使用Pythy解决方案来回答Python问题,除非NoPy是特别提到的。我认为这是一件好事,因为Python的容器类型和NyPy方法对于Python列表是不存在的。如果一个人正在编写一个更大的Python程序,那么如果在一个小范围内出现问题,并且只有基于numpy的答案,那么他们最终只需要为一段代码安装和/或导入numpy,这对于外部软件包来说有点愚蠢。
>>> c[4] = 0
>>> c
[[1], [2], [3], [4], 0, [6]]
>>> a  # does not have the 0, retains previous value
[[4], [9], [6]]
>>>