python学习——拷贝相关概念

概念

在python中,对象赋值实际上是对象的引用。拷贝一般有三种方法:

  1. 直接赋值
  2. 浅拷贝
  3. 深拷贝

区别

直接赋值:传递对象的引用,原始列表和赋值列表都可以改变列表的值。

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
原文地址:https://www.cnblogs.com/gforce/p/6223944.html