- 赋值:其实就是对象的引用(相当于取别名)。
- 浅拷贝(copy):拷贝父对象,不会拷贝对象内部的子对象,会引用子对象。
- 深拷贝(deepcopy): copy 模块的 deepcopy 方法,完全拷贝了父对象及其子对象。
一、赋值实例
1
2
3
4
5
6
7
8
9
|
# a这个大列表是一个父对象,里面的小列表是a的一个子对象 a = [ 1 , 2 , 3 , [ "a" , "b" ]] # 赋值实例 b = a print ( "a:" , a) print ( "b:" , b) ## 打印结果 a: [ 1 , 2 , 3 , [ 'a' , 'b' ]] b: [ 1 , 2 , 3 , [ 'a' , 'b' ]] |
解析:
b = a: 赋值引用,a 和 b 都指向同一个对象,所以得到的结果都一样
二、浅拷贝实例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
# 浅拷贝实例 a = [ 1 , 2 , 3 , [ "a" , "b" ]] c = a.copy() # 第一次打印 print ( "a:" , a) print ( "c:" , c) # 给a对象中的子对象添加元素 a[ 3 ].append( "c" ) print ( "a:" , a) print ( "c:" , c) # 给a这个父对象添加元素 a.append( 4 ) print ( "a:" , a) print ( "c:" , c) ## 打印结果 a: [ 1 , 2 , 3 , [ 'a' , 'b' ]] c: [ 1 , 2 , 3 , [ 'a' , 'b' ]] a: [ 1 , 2 , 3 , [ 'a' , 'b' , 'c' ]] c: [ 1 , 2 , 3 , [ 'a' , 'b' , 'c' ]] a: [ 1 , 2 , 3 , [ 'a' , 'b' , 'c' ], 4 ] c: [ 1 , 2 , 3 , [ 'a' , 'b' , 'c' ]] |
解析:
c = a.copy(): 浅拷贝, a 和 c 是一个独立的对象,但他们的子对象还是指向统一对象(是引用子对象)。
三、深拷贝实例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
# 深拷贝实例 import copy a = [ 1 , 2 , 3 , [ "a" , "b" ]] d = copy.deepcopy(a) # 第一次打印 print ( "a:" , a) print ( "d:" , d) # 给a对象中的子对象添加元素 a[ 3 ].append( "c" ) print ( "a:" , a) print ( "d:" , d) # 给a这个父对象添加元素 a.append( 4 ) print ( "a:" , a) print ( "d:" , d) ## 打印结果 a: [ 1 , 2 , 3 , [ 'a' , 'b' ]] d: [ 1 , 2 , 3 , [ 'a' , 'b' ]] a: [ 1 , 2 , 3 , [ 'a' , 'b' , 'c' ]] d: [ 1 , 2 , 3 , [ 'a' , 'b' ]] a: [ 1 , 2 , 3 , [ 'a' , 'b' , 'c' ], 4 ] d: [ 1 , 2 , 3 , [ 'a' , 'b' ]] |
解析:
d = copy.deepcopy(a): 深度拷贝, d 完全拷贝了a这个父对象及其子对象,a与d两者是完全独立的。
到此这篇关于python 中赋值,深拷贝,浅拷贝的区别的文章就介绍到这了,更多相关python赋值,深拷贝,浅拷贝内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!
原文链接:https://blog.csdn.net/karsa__/article/details/123506526