Python浅拷贝有几种形式,与深拷贝不同在�
Admin 2022-06-13 群英技术资�
不会开辟新的内存空间,只是复制了新对象的引用。所以当一个数据发生变化时,另外一个数据也会随之改变�
创建新对象,其内容是对原对象的引用。浅拷贝之所以称为浅拷贝,是因为它仅仅只拷贝了第一层,即只拷贝了最外层的对象本身,内部的元素都只是拷贝了一个引用而已,即内部元素如果被修改,则另外一个数据也会发生变化�
浅拷贝的三种形式�
A = [1, 2, 3, 4]
# �1� B = A[:] # �2� B = [a for a in A]
B = list(A)
B = copy.copy(A)
浅拷贝要分两种情况进行讨论:
1)当浅拷贝的值是不可变对象(例如字符串、元组、数值类型)时,和赋值情况一样,对象的内存地址(id())与浅拷贝原来的值一致�
2)当浅拷贝的值是可变对象(例如列表、字典、集合等)时,也需要分两种情况讨论�
首先,原来值的内存地址与拷贝后的内存地址不同�
深拷贝拷贝出来的对象是一个全新的对象,和原来的对象没有任何的关联。改变原有对象不会影响新的拷贝对象�
import copy # 不可变对� # A = (1, 2, 'hello') # 元组 # A = 1 # 数� A = 'hello' # 字符� print("********赋�********") B = A print(id(A)) print(id(B)) print(A) print(B) print("********浅拷�********") B = copy.copy(A) print(id(A)) print(id(B)) print(A) print(B) print("********深拷�********") B = copy.deepcopy(A) print(id(A)) print(id(B)) print(A) print(B)
结果�
********赋�********
1894005658264
1894005658264
hello
hello
********浅拷�********
1894005658264
1894005658264
hello
hello
********深拷�********
1894005658264
1894005658264
hello
hello
import copy # 可变对象 A = [1, 2, 3] print("********赋�********") B = A print(id(A)) print(id(B)) print(A) print(B) print("********浅拷�********") B = copy.copy(A) print(id(A)) print(id(B)) print(A) print(B) print("********深拷�********") B = copy.deepcopy(A) print(id(A)) print(id(B)) print(A) print(B)
结果�
********赋�********
1602694308360
1602694308360
[1, 2, 3]
[1, 2, 3]
********浅拷�********
1602694308360
1602694308424
[1, 2, 3]
[1, 2, 3]
********深拷�********
1602694308360
1602950316296
[1, 2, 3]
[1, 2, 3]
import copy # 可变对象 A = [1, 2, 3, [11, 10, 20]] # 可变对象的外层修� B1 = A # 赋� B2 = copy.copy(A) # 浅拷� B3 = copy.deepcopy(A) # 深拷� A.append(4) print("********赋�********") print(id(A)) print(id(B1)) print(A) print(B1) print("********浅拷�********") print(id(A)) print(id(B2)) print(A) print(B2) print("********深拷�********") print(id(A)) print(id(B3)) print(A) print(B3)
结果�
********赋�********
2215309238856
2215309238856
[1, 2, 3, [11, 10, 20], 4]
[1, 2, 3, [11, 10, 20], 4]
********浅拷�********
2215309238856
2215593496776
[1, 2, 3, [11, 10, 20], 4]
[1, 2, 3, [11, 10, 20]]
********深拷�********
2215309238856
2215593518024
[1, 2, 3, [11, 10, 20], 4]
[1, 2, 3, [11, 10, 20]]
import copy # 可变对象 A = [1, 2, 3, [11, 10, 20]] # 可变对象的内层修� B1 = A # 赋� B2 = copy.copy(A) # 浅拷� B3 = copy.deepcopy(A) # 深拷� A[3].append(4) print("********赋�********") print(id(A)) print(id(B1)) print(A) print(B1) print("********浅拷�********") print(id(A)) print(id(B2)) print(A) print(B2) print("********深拷�********") print(id(A)) print(id(B3)) print(A) print(B3)
结果
********赋�********
2288591069768
2288591069768
[1, 2, 3, [11, 10, 20, 4]]
[1, 2, 3, [11, 10, 20, 4]]
********浅拷�********
2288591069768
2288847138760
[1, 2, 3, [11, 10, 20, 4]]
[1, 2, 3, [11, 10, 20, 4]]
********深拷�********
2288591069768
2288847168264
[1, 2, 3, [11, 10, 20, 4]]
[1, 2, 3, [11, 10, 20]]
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:[email protected]进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容�
猜你喜欢
这篇文章主要介绍了基于Pygame实现一个画饼图游戏,可以根据键盘上输入不同的数字,将圆分割成不同的几个部分,每部分用不同的颜色来实现。需要的朋友可以参考一�
在本篇内容里小编给大家整理了一篇关于Python 多线程知识点总结及实例用法,对想好学习PY的用户非常友好,需要的参考下吧�
这篇文章主要为大家介绍了pandas选择或添加列生成新的DataFrame实现,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加�
通过 Python 绘制精美的地图?想在地图上自由的设置各种参数?想获得灵活的交互体验?这里就有一款Python 神包满足你:folium�
1、首先用pip来安装pymysqlpipinstallmysql报错:cryptographyrequiressetuptools18 5ornewer,pleaseupgradetoanewversion2、我想到的是�
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所�
增值电信经营许可证 : B1.B2-20140078