Python复制列表列表

标签 python list

<分区>

我正在使用 python 3.4.1。
对于单个列表 a=[1,2],如果我复制它,b = a.copy() 当我更改 b 中的项目时,它不会改变 a 中的项目。
但是,当我定义一个列表列表(实际上是一个矩阵)a = [[1,2],[3,4]] 时,当我分配 b = a.copy() 。我为列出 b 所做的实际上会影响 a
我查了他们的地址,他们是不同的。
谁能告诉我为什么?

ps:我做的是b[0][0] = x,a中的item也改了。

最佳答案

来自 copy 的文档模块:

The difference between shallow and deep copying is only relevant for compound objects (objects that contain other objects, like lists or class instances):

  • A shallow copy constructs a new compound object and then (to the extent possible) inserts references into it to the objects found in the original.
  • A deep copy constructs a new compound object and then, recursively, inserts copies into it of the objects found in the original.

当您调用常规 copy.copy() 时,您正在执行 复制。这意味着在列表列表的情况下,您将获得外部列表的新副本,但它将包含原始内部列表作为其元素。相反,您应该使用 copy.deepcopy(),它将创建外部列表和内部列表的新副本。

您在使用 copy([1,2]) 的第一个示例中没有注意到这一点的原因是像 int 这样的原语是不可变的,并且因此,如果不创建新实例就不可能更改它们的值。如果列表的内容改为可变对象(如列表,或任何具有可变成员的用户定义对象),那么这些对象的任何变化都会在列表的两个副本中看到。

关于Python复制列表列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28684154/

相关文章:

java - 对于单个元素列表使用 java.util.List 的开销是多少?

python - 使用 RoBERTa 加速嵌入 200 万个句子

python - Python 3.5 执行 SQL 查询时出现 UnicodeDecodeError

python - Pygame:如何消除行星图像上出现的黑色光晕?

python 具有概率的列表/字典

python - 零长度的列表理解

Python tldextract 读取 TLD 缓存文件时出错

Python while 循环不继续

python - 在python中使用多个条件对列表进行排序

python - 在没有 numpy (python) 的情况下对列表进行元素操作的正确样式