笔记:Python的浅复制和深复制
方法copy返回一个新字典,其包含的键-值对与原来的字典相同(这个方法执行的是浅复制,因为值本身是原件,而不是副本)。
>>> x = {"username": "hello", "machines": ["one", "two", "three"]}
>>> y = x.copy()
>>> y["username"] = "hi"
>>> y["machines"].append("four")
>>> y
{'username': 'hi', 'machines': ['one', 'two', 'three', 'four']}
>>> x
{'username': 'hello', 'machines': ['one', 'two', 'three', 'four']}
当替换副本的值的时候,原件不受影响。当时当修改副本中的值(就地修改,而不是替换),原件也将发生变化,因为原件指向的也是被修改的值。
为避免这个问题,一种办法是执行深复制,即同时复制值以及其包含的所有值等等。可以使用copy模块中的deepcopy函数。
>>> from copy import deepcopy
>>> d = {}
>>> d["name"] = ["Alice", "Ben"]
>>> c = d.copy()
>>> dc = deepcopy(d)
>>> d["name"].append("Clive")
>>> c
{'name': ['Alice', 'Ben', 'Clive']}
>>> dc
{'name': ['Alice', 'Ben']}