在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. TCP通信
  2. ionic常用的命令
  3. win7下安装openpyxl
  4. Android应用中菜单(Menu)的位置显示问题
  5. 标签navtab
  6. IOS9适配 MARK
  7. ajax 传参 乱码问题
  8. struts2的java文件中不能直接弹出script对话框
  9. 微博API怎么爬取其它未授权用户的微博/怎么爬取指定用户公布的微博
  10. JavaEE(2) - Weblogic 服务器执行JNDI绑定和查找
  11. 【jsp 练习】 给定三角形三边判断是否能组成三角形及计算面积
  12. c3p0连接池的使用
  13. WebWorker实战使用
  14. 输入和输出--java序列化机制
  15. Redis数据库之概念与创建服务
  16. 1228.Poor Pigs 可怜的猪
  17. linux中VI编写C程序。。。
  18. bash多进程
  19. Linux内核“问题门” - 学习问题、经验集锦
  20. 关于Javascript判断变量是否为空

热门文章

  1. Lua学习笔记(5): 表
  2. [network]交换机中用户权限
  3. Parcel 打包器简单使用记录
  4. HP VC模块Shared uplink Sets配置参考
  5. ASP.NET Web API - 使用 Castle Windsor 依赖注入
  6. 网易客户端授权密码,errormsg='authentication failed (method LOGIN)' exitcode=EX_NOPERM
  7. 3D打印产业链全景图
  8. Alpha发布——视频博客
  9. C++总结作业
  10. 0330复利计算java版