python直接赋值、浅拷贝和深度拷贝

  • 直接赋值:其实就是对象的引用(别名)。

  • 浅拷贝(copy):拷贝父对象,不会拷贝对象的内部的子对象。

  • 深拷贝(deepcopy): copy 模块的 deepcopy 方法,完全拷贝了父对象及其子对象。

 

一、字典浅拷贝

a = {1:[1,2,3]}
b = a.copy()

print("a:",a)   # 输出:a: {1: [1, 2, 3]}
print("b:",b)   # 输出:b: {1: [1, 2, 3]}

a[1].append(4)
print("a:",a)   # 输出:a: {1: [1, 2, 3,4]}
print("b:",b)   # 输出:b: {1: [1, 2, 3,4]}

 

二、深度拷贝

深度拷贝需要引入copy模块

import copy
a = {1:[1,2,3]}
c = copy.deepcopy(a)

print("a:",a)   # 输出:a: {1: [1, 2, 3]}
print("c:",c)   # 输出:b: {1: [1, 2, 3]}

a[1].append(5)
print("a:",a)   # 输出:a: {1: [1, 2, 3,5]}
print("c:",c)   # 输出:b: {1: [1, 2, 3]}

 

三、说明

1、b = a :赋值引用,a 和 b 都指向一个值;

python直接赋值、浅拷贝和深度拷贝

 

2、b = a.copy() : 浅拷贝,a 和 b 是一个独立的对象,但他们的子对象还是指向同意对象(是引用)。

python直接赋值、浅拷贝和深度拷贝

 

 

3、b = copy.deepcopy(a) : 深度拷贝,a 和 b 完全拷贝了父对象及其子对象,两者是完全独立的

python直接赋值、浅拷贝和深度拷贝

 

上一篇:Dev中出现Error 0: 操作成功完成。


下一篇:Profiler Window 学习