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