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

一般有三种方法,

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

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

>>> b=list
>>> print b
[1, 2, 3, ['a', 'b']]
>>> list.append(5)
>>> alist=[1,2,3,["a","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']]  始终没有改变

最新文章

  1. HTML、CSS、JS对unicode字符的不同处理
  2. Unity3D——键盘控制移动
  3. 增强型for循环,用于遍历数组元素
  4. java 基础(第一天)
  5. C# 之 集合整理
  6. redis在mac上的安装
  7. ORACLE函数之日期时间运算函数
  8. Java SE 8 流库(三)
  9. solr6.6教程-从mysql数据库中导入数据(三)
  10. LVS详细介绍以及遇到的坑
  11. Oracle sql 统计
  12. Linux 本地repo配置
  13. 微信小程序页面返回传参的问题
  14. 推荐几个Windows工具软件: ASuite - 便携的程序启动器
  15. Django模糊查询
  16. df -h和du -sh显示结果不一样的原因及解决
  17. Hadoop权限认证的执行流程
  18. C++类成员空间分配和虚函数表
  19. 制作alipay-sdk-java包到本地仓库
  20. 浅析Docker容器的应用场景

热门文章

  1. python model对象转为dict数据
  2. Linux下内存占用和CPU占用的计算
  3. 用excel做差异表达
  4. C#编写最小化时隐藏为任务栏图标的 Window appllication.
  5. python成长之路【第六篇】:python模块--time和datetime
  6. angular.js学习笔记
  7. 【汇编】mov [1000],bx:immediate operand not allowed
  8. APIO2015 酱油记
  9. 不错的TOMCAT监控好工具probe
  10. iOS开发网络篇—GET请求和POST请求