复制和深度复制函数如何用于字节数组参数?

问题描述 投票:0回答:1

文档说:

浅复制和深复制之间的区别仅与复合对象(包含其他对象的对象,如列表或类实例)相关

看起来

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
对象的浅层或深层副本)?

python copy deep-copy
1个回答
0
投票

您引用的那句话并不准确。当对象中的元素具有嵌套内容时,这种区别是相关的。这使得

deepcopy()
有必要递归地处理它们,对每个元素进行深度复制。

由于字节数组的元素只能是整数,并且没有任何嵌套内容,因此不需要递归它们。所以字节数组的

copy
deepcopy
是等价的。

© www.soinside.com 2019 - 2024. All rights reserved.