首页 > 编程语言 > 详细

python中深拷贝和浅拷贝

时间:2019-11-23 22:53:57      阅读:90      评论:0      收藏:0      [点我收藏+]

# copy.copy 和copy.deepcopy都需要引用copy模块

1 import copy
2 # 对于不可变类型(数值,元组,字符串),浅拷贝和深拷贝一样,内存地址都是一样的
3 a = 2
4 a2 = copy.copy(a)
5 a3 = copy.deepcopy(a)
6 print(a的内存地址是%s: % id(a))
7 print(a2的内存地址是%s: % id(a2))
8 print(a3的内存地址是%s: % id(a3))
1 C:\ProgramData\Anaconda3\python.exe E:/cnz/day2/深拷贝浅拷贝.py
2 a的内存地址是8791395856160: 
3 a2的内存地址是8791395856160: 
4 a3的内存地址是8791395856160: 

# 对于可变类型(列表,字典),分两种情况

 1 # 列表或者字典没有嵌套的情况下,浅拷贝和深拷贝内存地址与原对象都是不一样的,改变浅拷贝的值,不会影响原来的值
 2 li = [1,2,3]
 3 li2 = copy.copy(li)
 4 li3 = copy.deepcopy(li)
 5 print(li 的内存地址是%s:  % id(li))
 6 print(li2 的内存地址是%s:  % id(li2))
 7 print(li3 的内存地址是%s:  % id(li3))
 8 
 9 # 改变li2的值
10 li2[0] = 4
11 print(li)
12 print(li2)
13 print(li3)
1 li 的内存地址是43566728: 
2 li2 的内存地址是43565704: 
3 li3 的内存地址是43634632: 
4 [1, 2, 3]
5 [4, 2, 3]
6 [1, 2, 3]
 1 # 列表中嵌套列表的情况,如果改变外层列表,浅拷贝的值不会变,如果改变原内层列表的值,浅拷贝的内层列表值也会改变,以为内层列表的内存地址是一样的
 2 
 3 l = [1,2,[1,2]]
 4 l2 = copy.copy(l)
 5 l3 =copy.deepcopy(l)
 6 print(l的内存地址是%s: % id(l))
 7 print(l2的内存地址是%s: % id(l2))
 8 print(l3的内存地址是%s: % id(l3))
 9 l[2][0] = 3
10 print(l是%s % l)
11 print(l2是%s % l2)
12 print(l3是%s % l3)
1 l的内存地址是43634504: 
2 l2的内存地址是43634568: 
3 l3的内存地址是43610184: 
4 l是[1, 2, [3, 2]]
5 l2是[1, 2, [3, 2]]
6 l3是[1, 2, [1, 2]]

 

python中深拷贝和浅拷贝

原文:https://www.cnblogs.com/hujc/p/11919800.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!