Python | 复制的学问:深复制与浅复制

2018-07-16  本文已影响0人  shawn233

Python中的常见复制不亚于由简到繁三种方式:

我们知道,复制的目的无非是让一个变量具有与另一个变量相同的值。然而,在Python中,限于数据结构的复杂性,复制可能出现一个问题:对副本变量的修改影响到原变量的值(联想C语言中的指针)。

下面讨论怎么选择三种方式以避免出现上面所说的问题。

Python 3.6.5 |Anaconda, Inc.| (default, Mar 29 2018, 13:32:41) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.

>>> a = [1, 2, 3, 4]
>>> b = a.copy()
>>> print (b)
[1, 2, 3, 4]

>>> b[1] = 'a'
>>> print (b)
[1, 'a', 3, 4]
>>> print (a)
[1, 2, 3, 4]

>>> c = [[1, 2, 3], 4]
>>> d = c.copy()

>>> d[0][1] = 'c'
>>> print (d)
[[1, 'c', 3], 4]
>>> print (c)
[[1, 'c', 3], 4]
>>>

可以看出,修改b不会影响a,但修改d中的list元素影响了c中的对应元素。因此,调用copy方法在复杂数据结构嵌套时仍然出现了问题。这就是所谓的浅复制

>>> e = [[1, 2, 3], 4]
>>> from copy import deepcopy
>>> f = deepcopy(e)
>>> print (f)
[[1, 2, 3], 4]

>>> f[0][1] = 'c'
>>> print (f)
[[1, 'c', 3], 4]

>>> print (e)
[[1, 2, 3], 4]
>>>
上一篇 下一篇

猜你喜欢

热点阅读