为什么使用copy()时字符串和数组的处理方式不同?

2024-05-23 17:44:13 发布

您现在位置:Python中文网/ 问答频道 /正文

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

>>> import copy
>>> class A(object):
...     pass
... 
>>> a = A()
>>> a.lst = [1, 2, 3]
>>> a.str = "Hola"
>>> b = copy.copy(a)
>>> a.lst.append(4)
>>> a.str = "Adios"
>>> print b.lst
[1, 2, 3, 4]
>>> print b.str
Hola

Tags: 对象代码import属性objectpassclassprint
1条回答
网友
1楼 · 发布于 2024-05-23 17:44:13

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

Return a shallow copy of 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]

相关问题 更多 >