python学习——拷贝相关概念
概念
在python中,对象赋值实际上是对象的引用。拷贝一般有三种方法:
- 直接赋值
- 浅拷贝
- 深拷贝
区别
直接赋值:传递对象的引用,原始列表和赋值列表都可以改变列表的值。
1 >>> a = [1,2,3,4,5] 2 >>> b = a 3 >>> b.append(6) 4 >>> b 5 [1, 2, 3, 4, 5, 6] 6 >>> a 7 [1, 2, 3, 4, 5, 6]
浅拷贝:父对象已经是全新的了,子对象还是指向同一个对象(id相同),改变子对象还是对全部对象都有影响。
1 >>> import copy 2 >>> a = [1,2,3,[4,5]] 3 >>> b = copy.copy(a) 4 >>> a[3].append(1) 5 >>> a 6 [1, 2, 3, [4, 5, 1]] 7 >>> b 8 [1, 2, 3, [4, 5, 1]] 9 >>> id(a[3]) 10 140729508644408 11 >>> id(b[3]) 12 140729508644408
深拷贝:父对象和子对象都是全新的了(id不同),改变其中一个不会对别的对象造成任何影响。
1 >>> a 2 [1, 2, 3, [4, 5, 1]] 3 >>> b = copy.deepcopy(a) 4 >>> b 5 [1, 2, 3, [4, 5, 1]] 6 >>> a[3].append(2) 7 >>> a 8 [1, 2, 3, [4, 5, 1, 2]] 9 >>> b 10 [1, 2, 3, [4, 5, 1]] 11 >>> id(a[3]) 12 140729508644408 13 >>> id(b[3]) 14 140729508644768