當前位置:成語大全網 - 新華字典 - python 淺拷貝與深拷貝

python 淺拷貝與深拷貝

$ python

Python 2.7.2+ (default, Oct 4 2011, 20:03:08)

[GCC 4.6.1] on linux2

Type "help", "copyright", "credits" or "license" for more information.

>>> import copy

>>> glist = list(range(10))

>>> w = dict(var=10, lst=glist)

>>> x = w

>>> y = copy.copy(w)

>>> z = copy.deepcopy(w)

>>> w

{'var': 10, 'lst': [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]}

>>> x

{'var': 10, 'lst': [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]}

>>> y

{'var': 10, 'lst': [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]}

>>> z

{'var': 10, 'lst': [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]}

copy, deepcopy創建的新對象不隨源對象改變而改變

>>> w['var']=15

>>> w

{'var': 15, 'lst': [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]}

>>> x

{'var': 15, 'lst': [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]}

>>> y

{'var': 10, 'lst': [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]}

>>> z

{'var': 10, 'lst': [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]}

deepcopy創建對象內的引用也被復制,deepcopy的新引用不隨源引用改變

>>> glist[-1]='a'

>>> w

{'var': 15, 'lst': [0, 1, 2, 3, 4, 5, 6, 7, 8, 'a']}

>>> x

{'var': 15, 'lst': [0, 1, 2, 3, 4, 5, 6, 7, 8, 'a']}

>>> y

{'var': 10, 'lst': [0, 1, 2, 3, 4, 5, 6, 7, 8, 'a']}

>>> z

{'var': 10, 'lst': [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]}

>>>