python - 使用 [ :] or copy() in python is shallow? 复制列表

标签 python python-3.x

<分区>

假设我有一个包含一些值的列表 a,我做了一个 b = a[:]。然后修改列表 b 的内容不会根据我读过的内容更改列表 a 。所以,这意味着它是一个深拷贝。但是 python 文档仍然将其称为浅拷贝。有人可以帮我解决这个问题吗?

最佳答案

演示浅拷贝的含义:

a = [ [1,2], [3,4,5] ]
b = a[:]  # make a shallow copy
a is b  # not the same object, because this is a copy
=> False
a == b  # same value, because this is a copy
=> True
a[0] is b[0]  # elements are the *same objects*, because this is a *shallow* copy
=> True

改变a的结构不会反射(reflect)在b中,因为这是一个副本:

a.pop()
len(a)
=> 1
len(b)
=> 2

演示与深拷贝的区别:就地更改a中包含的对象(相对于a的结构),反射(reflect)在中>b,因为 b 引用与 a 相同的对象。

a[0][0] = 'XYZ'
b[0]
=> ['XYZ', 2]

关于python - 使用 [ :] or copy() in python is shallow? 复制列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38841875/

相关文章:

django - 如何在新项目中开发/包含 Django 自定义可重用应用程序?有一些指导方针吗?

python - PIL Image.open 创建损坏的图像

python - 将一列交换为一行

Python 如何制作表格

python - 找到具有 k 个唯一字母的最大可能子串。 (递归)

python - 如何使用 Spark 创建稀疏 CSCMatrix?

python - 在Python中是否有一种正确的方法来实现具有与其父类(super class)不同的方法签名的子类?

python - 允许多个可变参数列表?

python - 检查列表是否包含python中的另一个列表

python - 使用 ffmpeg 调整大小后文件损坏