python-浅拷贝和深拷贝
浅拷贝和深拷贝
简述
深浅拷贝的差异仅对复合对象有意义,比如列表,类实例。
浅拷贝
拷贝的副本共享内部对象的引用的拷贝为浅拷贝
举个栗子
list1 = [1, 2, [3, 4], (5, 6)]
list2= list(list1)
print("list1: ", list1, " list2: ", list2)
#list1: [1, 2, [3, 4], (5, 6)] list2: [1, 2, [3, 4], (5, 6)]
print("list1 id: ", id(list1), " list2 id: ", id(list2))
#list1 id: 4940488 list2 id: 38569032 print("\nlist1 element id:")
for ele1 in list1:
print(id(ele1))
#list1 element id:
#
#
#
# print("\nlist2 element id:")
for ele2 in list2:
print(id(ele2)) #list2 element id:
#
#
#
#
通过类构造函数对list1进行了浅拷贝,通过id(list1)和id(list2)可知list1与list2是两个不同的对象,
但是list1和list2共享内部对象的引用(由list1与list2中的各个元素的id(ele)可知)
上述代码的执行如下图:

浅拷贝方式
(1)通过类构造函数
(2)copy模块中的copy方法
(3)[:](仅对于可变序列)
深拷贝
拷贝的副本不共享内部对象的引用的拷贝为深拷贝
举个栗子
import copy
list1 = [1, 2, [3, 4], (5, 6)]
list2= copy.deepcopy(list1)
print("list1: ", list1, " list2: ", list2)
#list1: [1, 2, [3, 4], (5, 6)] list2: [1, 2, [3, 4], (5, 6)]
print("list1 id: ", id(list1), " list2 id: ", id(list2))
#list1 id: 35095880 list2 id: 35192776 print("\nlist1 element id:")
for ele1 in list1:
print(id(ele1)) #list1 element id:
#
#
#
# print("\nlist2 element id:")
for ele2 in list2:
print(id(ele2)) #list2 element id:
#
#
#
#
通过copy模块中的deepcopy对list1进行了深拷贝得到list2,由list1与list2的id可知list1与list2是两个不同的对象
由list1和list2中各个元素的id可知,lis1与list2t中的可变对象不共享对象引用
上述代码的执行如下图:

python-浅拷贝和深拷贝的更多相关文章
- python 浅拷贝和深拷贝(9)
何谓浅拷贝/深拷贝,说得直白一点,其实就是数据拷贝,两者到底有什么区别呢?听着就挺迷糊的,python开发项目的时候说不定你就能碰上这样的坑~~ 一.普通的变量赋值 我们平常使用的变量赋值就是 ...
- python浅拷贝和深拷贝
博文参考地址:https://blog.csdn.net/qq_20084101/article/details/82925067 最近在撸码的时候发现了一个严重的问题: a = [1,2] c = ...
- python浅拷贝与深拷贝
今天写程序,人为制造了一个由浅拷贝引起的bug,有必要归纳一下.先附上源代码: class PerformanceTest(object): def __init__(self): ....... s ...
- Python浅拷贝与深拷贝(可变对象与不可变对象)
第一次遇到深拷贝和浅拷贝的问题是用python在一个for循环中对一个list赋值,使用的语句是 a = b 这个b会不断带入循环,每次计算得到,最后发现list乱七八糟的,后来才发现,python中 ...
- python浅拷贝与深拷贝浅析
首先我们要明确,python中大多数都是浅拷贝,我们先说原因: 1.时间花费更少 2.内存更小 3.效率更高,浅拷贝只拷贝顶层数据,一般情况下比深拷贝效率高. 容器(如列表)切片是浅拷贝
- 学习Python一年,这次终于弄懂了浅拷贝和深拷贝
官方文档:copy主题 源代码: Lib/copy.py 话说,网上已经有很多关于Python浅拷贝和深拷贝的文章了,不过好多文章看起来还是决定似懂非懂,所以决定用自己的理解来写出这样一篇文章. 当别 ...
- 【转】Python中的赋值、浅拷贝、深拷贝介绍
这篇文章主要介绍了Python中的赋值.浅拷贝.深拷贝介绍,Python中也分为简单赋值.浅拷贝.深拷贝这几种"拷贝"方式,需要的朋友可以参考下 和很多语言一样,Python中 ...
- 关于python中赋值、浅拷贝、深拷贝之间区别的深入分析
当重新学习了计算机基础课程<数据结构和算法分析>后再来看这篇自己以前写的博文,发现错误百出.python内置数据类型之所以会有这些特性,归根结底是它采用的是传递内存地址的方式,而不是传递真 ...
- python中的深拷贝与浅拷贝
深拷贝和浅拷贝 浅拷贝的时候,修改原来的对象,浅拷贝的对象不会发生改变. 1.对象的赋值 对象的赋值实际上是对象之间的引用:当创建一个对象,然后将这个对象赋值给另外一个变量的时候,python并没有拷 ...
- python的浅拷贝和深拷贝
python对象有两种拷贝的形式:浅拷贝和深拷贝. 在<python核心编程>中看到对这两种拷贝的分析,觉得十分收益,所以记录在此. id()方法:id()方法可以查看某个对象的ID,类似 ...
随机推荐
- 基于jQuery发展历程时间轴特效代码
分享一款基于jQuery发展历程时间轴特效代码,带左右箭头,数字时间轴选项卡切换特效下载.效果图如下: 在线预览 源码下载 实现的代码. html代码: <div id="time ...
- mybatis-plus忽略映射字段
mybatis-plus使用对象属性进行SQL操作,经常会出现对象属性非表字段的情况,忽略映射字段使用以下注解: @TableField(exist = false):表示该属性不为数据库表字段,但又 ...
- mac 上使用 zip 版的mysql
1. 下载: 2. 解压,然后复制到需要的目录下 3. 修改 /usr/local/mysql的所有者为mysql: chown -R mysql:mysql mysql (这一步我是没做,爱做不做. ...
- THINKPHP5近期暴露的漏洞
这个THINKPHP5的漏洞涉及好几个版本,我测试中5.0.21和5.0.22都有,据说是5.0 ~ 5.0.23之间的版本都存在,这个漏洞可以执行写文件的操作. 当然了,赶紧升级框架到安全版本是比较 ...
- vscode c++ 编译生成后,调试时无法命中断点
//test.cpp #include <stdio.h> ; void print_line(char *str) { if (str != NULL) printf("%s\ ...
- 转载:【Scala】使用Option、Some、None,避免使用null
转载自Jason DingGitCafe博客主页(http://jasonding1354.gitcafe.io/)Github博客主页(http://jasonding1354.github.io/ ...
- An error occurred. Sorry, the page you are looking for is currently unavailable. Please try again later.
刚装完 PHP.Nginx,准备跑下 phpMyAdmin 程序,结果报以下错误: An error occurred. Sorry, the page you are looking for is ...
- 以太坊: ETH 发送交易 sendRawTransaction 方法数据的签名 和 验证过程
作者:林冠宏 / 指尖下的幽灵 掘金:https://juejin.im/user/587f0dfe128fe100570ce2d8 博客:http://www.cnblogs.com/linguan ...
- git 创建新分支并推送到远程分支
git branch test git checkout test git push origin test:test git branch --set-upstream-to origin/te ...
- rmq区间最值
时间复杂度O(NlogN)+O(Q) int a[N]; int dpmax[N][20],dpmin[N][20]; void first(int n) { mm(dpmax,0); mm(dpmi ...