标签:value import 来源 port gif 字典 ref int 不同的
来源:https://www.cnblogs.com/lixiaoliuer/p/6094698.html
数字和字符串中的内存都指向同一个地址,所以深拷贝和浅拷贝对于他们而言都是无意义的
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
import copy a = 123 #赋值 print ( id (a)) #输出存储变量的地址 b = a print ( id (b)) b = copy.copy(a) #浅拷贝 print ( id (b)) c = copy.deepcopy(a) #深拷贝 print ( id (c)) |
对于字典 元组 和列表来说,进行浅拷贝和深拷贝时,内存的地址是不同的
浅拷贝只会拷贝内存中的第一层数据
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
import copy dic = { ‘key1‘ : 123 , ‘key2‘ :[ 123 , 456 ]} #创建一个字典嵌套列表 print ( id (dic[ ‘key1‘ ])) print ( id (dic[ ‘key2‘ ])) print ( id (dic[ ‘key2‘ ][ 0 ])) #打印列表中的地址 print ( "\n" ) new_dic = copy.copy(dic) #使用浅拷贝赋值 print ( "*" , id (new_dic[ ‘key1‘ ])) print ( "*" , id (new_dic[ ‘key2‘ ])) print ( "*" , id (new_dic[ ‘key2‘ ][ 0 ]))<br><br><br> |
发现内存中地址的值都是完全相同
而对于深拷贝来说将会把所有数据重新创建
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
import copy dic = { ‘key1‘ : 123 , ‘key2‘ :[ 123 , 456 ]} #创建一个字典嵌套列表 print ( id (dic[ ‘key1‘ ])) print ( id (dic[ ‘key2‘ ])) print ( id (dic[ ‘key2‘ ][ 0 ])) #打印列表中的地址 print ( "\n" ) new_dic = copy.deepcopy(dic) #使用深拷贝赋值 print ( "*" , id (new_dic[ ‘key1‘ ])) print ( "*" , id (new_dic[ ‘key2‘ ])) print ( "*" , id (new_dic[ ‘key2‘ ][ 0 ])) |
在浅拷贝中 当改变拷贝对象的值 被拷贝对象的值也会随之改变
import copy dic = {‘key1‘:123,‘key2‘:[123,456]} #创建一个字典嵌套列表 print(dic[‘key2‘][0]) #打印列表中的地址 print("\n") new_dic = copy.copy(dic) #使用浅拷贝赋值 new_dic[‘key2‘][0] = 789 #改变字典中列表的值 print(dic[‘key2‘][0]) print((new_dic[‘key2‘][0]))
当不想改变被拷贝的值时 应该使用深拷贝
import copy dic = {‘key1‘:123,‘key2‘:[123,456]} #创建一个字典嵌套列表 print(dic[‘key2‘][0]) #打印列表中的地址 print("\n") new_dic = copy.deepcopy(dic) #使用深拷贝赋值 new_dic[‘key2‘][0] = 789 #改变字典中列表的值 print(dic[‘key2‘][0]) print((new_dic[‘key2‘][0]))
标签:value import 来源 port gif 字典 ref int 不同的
原文地址:https://www.cnblogs.com/tester-jianx/p/11240142.html