Python浅拷贝有几种形式,与深拷贝不同在哪
Admin 2022-06-13 群英技术资讯 1412 次浏览
这篇文章主要介绍了Python浅拷贝有几种形式,与深拷贝不同在哪相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Python浅拷贝有几种形式,与深拷贝不同在哪文章都会有所收获,下面我们一起来看看吧。不会开辟新的内存空间,只是复制了新对象的引用。所以当一个数据发生变化时,另外一个数据也会随之改变。
创建新对象,其内容是对原对象的引用。浅拷贝之所以称为浅拷贝,是因为它仅仅只拷贝了第一层,即只拷贝了最外层的对象本身,内部的元素都只是拷贝了一个引用而已,即内部元素如果被修改,则另外一个数据也会发生变化。
浅拷贝的三种形式:
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]]
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
ROI区域又叫感兴趣区域。在机器视觉、图像处理中,从被处理的图像以方框、圆、椭圆、不规则多边形等方式勾勒出需要处理的区域,称为感兴趣区域,ROI。本文主要为大家介绍如何通过Python+OpenCV提取ROI区域,需要的朋友可以了解一下
Python程序能用很多方式处理日期和时间,转换日期格式是一个常见的功能。Python提供了一个time和calendar模块可以用于格式化日期和时间。时间间隔是以秒为单位的浮点小数。每个时间戳都以自从1970年1月1日午夜(历元)经过了多长时间来表示。Python的time模块下有很多函数可以转换常见日期格式。如函数time.time()用于获取当前时间戳,如下实例:
从ZoomEye到BugScan,再到TangScan,大型的Poc/EXP平台越来越多,各种扫描器也层出不穷。Web安全的门槛越来越高,自动化的渗透已经成了一种趋势。我一直梦想着,将来渗透的时候,先打开自己写的各种自动化工具,输入目标,然后喝着咖啡,刷着知乎,最后只需要把工具的分析报告整理整理就可以了。事实上,现在的扫描器也正在向这个方向发展,期待一键getshell的那一天。
python中要想处理excel,必须用到第三方模块xlrd,所以windows 我安装方法是cmd中命令:E: ANZHUANG Python Scripts>easy_install xlrd
怎样用Python写一个简单倒计时功能?对于倒计时功能的应用场景有很多,我们经常能在电商网站上看到,倒计时功能也是比较实用的,下面我们就来看看用Python怎样实现简单的倒计时。
成为群英会员,开启智能安全云计算之旅
立即注册关注或联系群英网络
7x24小时售前:400-678-4567
7x24小时售后:0668-2555666
24小时QQ客服
群英微信公众号
CNNIC域名投诉举报处理平台
服务电话:010-58813000
服务邮箱:service@cnnic.cn
投诉与建议:0668-2555555
Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 ICP核准(ICP备案)粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008