为什么在使用copy()时对字符串和数组进行不同的处理?

时间:2019-06-22 11:26:59

标签: python

我想知道为什么在以下代码段中,复制的对象unmodifiable中的属性的行为不同。 b产生b.lst的更新值,但是a.lst保留分配给b.str的原始值。为什么会这样?

a.str

1 个答案:

答案 0 :(得分:3)

根据[Python 3.Docs]: copy.copy(x)强调是我的):

  

返回 x 浅拷贝

要真正复制列表(或任何可变对象),请改用copy.deepcopy

>>> import copy
>>>
>>> class A(object): pass  # In Python 3, object is extended by default
...
>>>
>>> a = A()
>>> a.lst = [1, 2, 3]
>>> a.str = "Hola"
>>>
>>> b = copy.copy(a)
>>>
>>> c = copy.deepcopy(a)
>>>
>>> a.lst.append(4)
>>> a.str = "Adios"
>>>
>>> print(b.str, b.lst)
Hola [1, 2, 3, 4]
>>>
>>> print(c.str, c.lst)
Hola [1, 2, 3]