文档说:
浅复制和深复制之间的区别仅与复合对象(包含其他对象的对象,如列表或类实例)相关
看起来
bytearray
对象不是复合对象(我认为是这样,因为与 list
对象不同,bytearray
对象不包含对其他对象的引用)。因此,对于此类对象,copy.copy
和 copy.deepcopy
将产生相同的结果。但文档没有描述此特定数据类型的详细信息。我知道对于不可变的数字和 str
对象(它们显然也不是复合的)copy.copy
和 copy.deepcopy
只是返回它们的参数(它们不会在这里创建新对象)。
我用
bytearray
对象 obj
做了一些测试,得出的结论是,对于这样的对象,函数 copy.copy(obj)
和 copy.deepcopy(obj)
将创建一个与原始对象 obj
具有相同值的新对象:
>>> import copy
>>> obj = bytearray(b'hello')
>>> obj2 = copy.copy(obj)
>>> obj3 = copy.deepcopy(obj)
>>> obj2 is obj; obj3 is obj
False
False
>>> obj2 == obj; obj3 == obj
True
True
那么,你能说我的结论是正确的吗(特别是,不需要对
bytearray
对象进行深拷贝 – 进行浅拷贝就足够了)?也许在此过程中还有一些我应该注意的其他重要细节(制作 bytearray
对象的浅层或深层副本)?
您引用的那句话并不准确。当对象中的元素具有嵌套内容时,这种区别是相关的。这使得
deepcopy()
有必要递归地处理它们,对每个元素进行深度复制。
由于字节数组的元素只能是整数,并且没有任何嵌套内容,因此不需要递归它们。所以字节数组的
copy
和 deepcopy
是等价的。