Python中list的拷贝问题

对于a=[1,2,3],以下方式等价:

  1. b = a[:]
  2. c = list(a)
  3. d = copy.copy(a)
  4. e = a*1 # 淫技

即拷贝a中元素的值到新的内存块
但是对于a中元素的值是地址的情况,依然会存在新的变量与旧的变量指向同一内存块的情况


f = copy.deepcopy(a)
完全递归拷贝a中元素的值到新的内存块,不存在地址拷贝的情况

>>> a = [[10],20]
>>> b = a[:]
>>> f = copy.deepcopy(a)

>>> a.append(21)
>>> a[0].append(21)

>>> print(id(a),a)
(4514549984, [[10, 21], 20, 21])
>>> print(id(b),b)
(4514551424, [[10, 21], 20])
>>> print(id(f),f)
(4514551496, [[10], 20])
posted @ 2017-04-11 11:38  chace  阅读(234)  评论(0编辑  收藏  举报