可变与不可变
您需要了解可变元素和不可变元素之间的区别。也就是说,Python 中的字典和列表都是mutable。这意味着,如果您在一个地方修改它,那么在其他地方也会修改它。
另外,可变类型的变量(例如list
or dict
)可以包含不可变元素(例如str
),以及相反的方式:不可变类型的变量(例如tuple
)可以包含可变元素(例如list
or dict
).
可变性示例
因此,这使用列表的示例显示了可变性:
>>> a = [1, 2, 3, 4]
>>> b = a
>>> a
[1, 2, 3, 4]
>>> b
[1, 2, 3, 4]
>>> a[2] = 'x'
>>> a
[1, 2, 'x', 4]
>>> b
[1, 2, 'x', 4]
如何获取列表或字典的副本
获取副本list
,你只需这样做:
new_list = old_list[:] # the slicing at the end just takes the whole list
的情况下dict
这通常就足够了:
new_dict = old_dict.copy()
嵌套列表/字典
然而,虽然平面或仅包含可变元素的列表/字典可以按照我展示的方式进行复制,但要获得更复杂的可变数据结构的副本,您需要做更多的事情......
在这种情况下,非常有帮助的可能是copy
模块及其deepcopy功能 http://docs.python.org/2/library/copy.html#copy.deepcopy。的文档copy
模块详细说明了其用途:
Python 中的赋值语句不会复制对象,而是在目标和对象之间创建绑定。对于可变或包含可变项的集合,有时需要一份副本,以便可以更改一个副本而不更改另一个副本。该模块提供通用的浅复制和深复制操作(如下所述)。