码迷,mamicode.com
首页 > 编程语言 > 详细

【转】python的深拷贝和浅拷贝

时间:2019-07-24 19:18:32      阅读:98      评论:0      收藏:0      [点我收藏+]

标签: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
 
= 123                #赋值
 
print(id(a))           #输出存储变量的地址
 
= a
 
print(id(b))
 
= copy.copy(a)       #浅拷贝
 
print(id(b))
 
= 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]))
技术图片

 技术图片

 

【转】python的深拷贝和浅拷贝

标签:value   import   来源   port   gif   字典   ref   int   不同的   

原文地址:https://www.cnblogs.com/tester-jianx/p/11240142.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!