Python中list的拷贝问题
对于a=[1,2,3],以下方式等价:
- b = a[:]
- c = list(a)
- d = copy.copy(a)
- 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])
作者:chace