我在Python中读到了关于浅拷贝和深拷贝的文章,其中我在文档中遇到了以下句子:
浅层复制和深度复制之间的区别仅适用于复合对象(包含其他对象的对象,如列表或类实例)。
我不知道什么是复合对象,什么不是复合对象。基于上述定义(包含其他对象的对象),每个容器都是一个复合对象,因为容器中的每个元素都是对象(因为在Python中,所有元素都是对象,甚至是整数号),容器本身也是一个对象,因此每个容器(至少有一个元素)都是一个复合对象。
如果我们同意我所说的,那么引文中关于浅拷贝和深拷贝的第一部分--“浅拷贝和深拷贝之间的区别仅与复合对象有关”--就会有问题,因为如果我们知道浅层复制和深拷贝之间的区别只适用于复合对象,那么对于一个整数列表的浅拷贝就不应该工作了:
pp = [1,2,3,4]
qq= copy.copy(pp)
pp[0] = 99
print(pp)
>> [99,2,3,4]
print(qq)
>> [1,2,3,4]
有人能澄清复合对象的含义吗?
发布于 2022-07-12 20:52:40
那句话用词很差。他们的意思是
浅层复制和深度复制之间的区别仅适用于复合对象(包含其他对象的对象,如列表或类实例),其中任何元素(在任何嵌套深度)都是可变的。
在浅拷贝和深拷贝中,顶层对象都会被复制.但是,当您进行深度复制时,所有可变元素也都会被复制,其中包含的可变元素也是递归的。
同时,复制包含嵌套可变对象的不可变复合对象(例如元组)。
x = ([1, 2], [3, 4])
y = copy.copy(x)
z = copy.deepcopy(x)
id(x[0]) == id(y[0]) # True
id(x[0]) == id(z[0]) # False
https://stackoverflow.com/questions/72958108
复制相似问题