在python中,对象赋值实际上是对象的引用。当创建一个对象,然后把它赋给另一个变量的时候,python并没有拷贝这个对象,而只是拷贝了这个对象的引用

一般有三种方法,

alist=[1,2,3,["a","b"]]

(1)直接赋值,默认浅拷贝传递对象的引用而已,原始列表改变,被赋值的b也会做相同的改变

>>> b=alist

>>> print b

[1, 2, 3, ['a', 'b']]

>>> alist.append(5)

>>> print alist;print b

[1, 2, 3, ['a', 'b'], 5]

[1, 2, 3, ['a', 'b'], 5]

(2)copy浅拷贝,没有拷贝子对象,所以原始数据改变,子对象会改变

>>> import copy

>>> c=copy.copy(alist)

>>> print alist;print c

[1, 2, 3, ['a', 'b']]

[1, 2, 3, ['a', 'b']]

>>> alist.append(5)

>>> print alist;print c

[1, 2, 3, ['a', 'b'], 5]

[1, 2, 3, ['a', 'b']]

>>> alist[3]

['a', 'b']

>>> alist[3].append('cccc')

>>> print alist;print c

[1, 2, 3, ['a', 'b', 'cccc'], 5]

[1, 2, 3, ['a', 'b', 'cccc']] 里面的子对象被改变了

(3)深拷贝,包含对象里面的自对象的拷贝,所以原始对象的改变不会造成深拷贝里任何子元素的改变

>>> import copy

>>> d=copy.deepcopy(alist)

>>> print alist;print d

[1, 2, 3, ['a', 'b']]

[1, 2, 3, ['a', 'b']]始终没有改变

>>> alist.append(5)

>>> print alist;print d

[1, 2, 3, ['a', 'b'], 5]

[1, 2, 3, ['a', 'b']]始终没有改变

>>> alist[3]

['a', 'b']

>>> alist[3].append("ccccc")

>>> print alist;print d

[1, 2, 3, ['a', 'b', 'ccccc'], 5]

[1, 2, 3, ['a', 'b']]  始终没有改变

python深拷贝和浅拷贝的区别_【转】python的复制,深拷贝和浅拷贝的区别相关推荐

  1. python除法函数一般如何命名_关于python:当用于除法时,’/’和’//’之间有什么区别?...

    使用一个对另一个有好处吗?在Python2中,它们似乎都返回相同的结果: >>> 6/3 2 >>> 6//3 2 请参考整数除法的问题,因为引入了//运算符进行整 ...

  2. c语言与python的语法区别_来自python的C语言(基本语法),从,Python,看,基础,篇

    一个学过C/C++的咸鱼,最近学起了Python,不得不说,知识还是老知识,语法也简单多了,但就是容易搞混.大致总结一下Python与C的区别,以后别张冠李戴啦,嘻嘻. Part  1.输入与输出 输 ...

  3. python字符串和字节串有什么区别_对于Python中的字节串bytes和字符串以及转义字符的新的认识...

    事情的起因是之前同学叫我帮他用Python修改一个压缩包的二进制内容用来做fuzz,根据他的要求,把压缩包test.rar以十六进制的方式打开,每次修改其中一个十六进制字符串并保存为一个新的rar用来 ...

  4. anaconda和python区别_初学 Python 者自学 Anaconda 的正确姿势是什么?

    事实上Anaconda 和 Jupyter notebook已成为数据分析的标准环境. 简单来说,Anaconda是包管理器和环境管理器,Jupyter notebook 可以将数据分析的代码.图像和 ...

  5. python中numpy数组的合并_基于Python中numpy数组的合并实例讲解

    基于Python中numpy数组的合并实例讲解 Python中numpy数组的合并有很多方法,如 - np.append() - np.concatenate() - np.stack() - np. ...

  6. python增量赋值是什么意思_关于python中的增量赋值的理解

    增量赋值运算符 += 和 *= 的表现取决于它们的第一个操作对象 += 操作首先会尝试调用对象的 __ iadd__方法,如果没有该方法,那么尝试调用__add__方法,所以+= 与 + 的区别实质是 ...

  7. python中的列表和元组_浅析Python中的列表和元组

    区别列表是动态数组,它们可变且可以重设长度(改变其内部元素的个数). 元组是静态数组,它们不可变,且其内部数据一旦创建便无法改变. 元组缓存于Python运行时环境,这意味着我们每次使用元组时无须访问 ...

  8. python爬取b站评论_用python 抓取B站视频评论,制作词云

    python 作为爬虫利器,与其有很多强大的第三方库是分不开的,今天说的爬取B站的视频评论,其实重点在分析得到的评论化作嵌套的字典,在其中取出想要的内容.层层嵌套,眼花缭乱,分析时应细致!步骤分为以下 ...

  9. python基础语法加爬虫精进_从Python安装到语法基础,这才是初学者都能懂的爬虫教程...

    Python和PyCharm的安装:学会Python和PyCharm的安装方法 变量和字符串:学会使用变量和字符串的基本用法 函数与控制语句:学会Python循环.判断语句.循环语句和函数的使用 Py ...

  10. python发行版是什么意思_致 Python 初学者

    当下是一个喧嚣.浮躁的时代.我们总是被生活中大量涌现的热点所吸引,几乎没有深度阅读和思考的时间和机会.我始终认为,学习是需要沉下心来慢慢钻研的,是长期的:同时,学习不应该被赋予太多的功利色彩.一个Py ...

最新文章

  1. 自学python都需要哪些书-【经验分享】自学Python的学习顺序!附学习资料
  2. Ubuntu下用gcc与nasm联合编译
  3. python标准词匹配_用 Python 自动化办公能做到哪些有趣或有用的事情?
  4. 26、Windows API Shell编程(2)
  5. 云服务器上划虚拟主机,云服务器上划虚拟主机
  6. Hibernate_01
  7. python做测试需要哪些技能_测试人员需要具备哪些基本技能
  8. PID闭环控制系统的Simulink仿真
  9. 1.4多媒体技术的发展历史
  10. html留言页面设计,html的留言板制作(js)
  11. 计算机中缺少d3dx11_43.dll,韩博士传授win10系统运行软件提示计算机丢失d3dx11_43.dll的处理对策...
  12. 前端200道面试题及答案(更新中)
  13. 位运算实现加减乘除运算——超详细C语言描述
  14. 卷积神经网络——灰度图像的卷积
  15. Flask学习(二)-Jinji2模板引擎
  16. Python+selenium注册唯一账号
  17. Unity中Scale详解
  18. 什么是预测区间和置信区间
  19. 前端SEO优化技术汇总
  20. Allegro输出DXF文件操作指导

热门文章

  1. 【VS开发】MFC修改Opencv namedWindow的风格
  2. Java中的静态方法和单例模式比较
  3. 线程--线程池--委托--task---async/await
  4. 使用argparse对python脚本时运行时添加参数
  5. Ubuntu之sshfs远程目录挂载到本地
  6. Ubuntu18.04之星际译王及辞典
  7. Ubuntu alias在/etc/profile重启无效解决
  8. 修改Chrome默认搜索引擎
  9. Ubuntu和Mac使用gdbserver远程调试android源码
  10. LED显示驱动(七):图层基本测试总结