np.copy(obj) vs obj.copy() vs copy.copy(obj) vs copy.deepcopy(obj)
我看到,基本上有四种方法可以用来复制Python中的对象。
我对这四种不同之处并不十分清楚。
请有人从地面上解释一下差异。
谢谢。
发布于 2022-03-15 03:00:59
TL;DR --它们在复制方法上有所不同:
numpy.copy()(dict | list | ...).copy()copy.copy()copy.deepcopy()也是出于以下目的:
numpy.copy()(dict | list | ...).copy()copy.copy()copy.deepcopy()此外,如果存在,copy.copy()或copy.deepcopy()将分别在内部调用obj.__copy__()和obj.__deepcopy__()方法,这意味着用户类可以控制复制行为。
浅拷贝与深拷贝的解释
python中有两种拷贝:浅拷贝和深拷贝。
来自Python文档
浅复制和深度复制之间的区别仅适用于复合对象(包含其他对象的对象,如列表或类实例):
这种差异最好在复制类实例时显示。
>>> class SomeClass:
... pass
>>> a = [SomeClass()]
>>> b = a.copy()
>>> a[0] == b[0]
True
>>> id(a[0])
2778700770576
>>> id(b[0])
2778700770576
# Not actually copied, referencing to same instance.>>> import copy
>>> a = [SomeClass()]
>>> b = copy.deepcopy(a)
>>> a[0] == b[0]
False
>>> id(a[0])
2778695702544
>>> id(b[0])
2778717746032
# Actually copied into different instance对于浅拷贝,如果您的数据包含复合对象(最常见的是list、dict、用户类等),并且您必须使用它,请确保使用深度复制以避免以下情况:
>>> a = [[0], [0]]
>>> b = a.copy()
>>> b[0].append(10)
>>> a
[[0, 10], [0]]
>>> b
[[0, 10], [0]]
# ---
>>> a = [[0], [0]]
>>> b = copy.deepcopy(a)
>>> b[0].append(10)
>>> a
[[0], [0]]
>>> b
[[0, 10], [0]]https://stackoverflow.com/questions/71475896
复制相似问题