标签: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 copya = 123                #赋值print(id(a))           #输出存储变量的地址b = aprint(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 copydic = {‘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 copydic = {‘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