python学习——拷贝相关概念

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

 

以上是关于python学习——拷贝相关概念的主要内容,如果未能解决你的问题,请参考以下文章

Python学习笔记4(浅拷贝深拷贝)

代码学习PYTHON 深拷贝和浅拷贝

python 机器学习有用的代码片段

python之模块和包

学习笔记:python3,代码片段(2017)

Python学习之路:基础知识之深浅拷贝