python的拷贝方法有:切片方法, 工厂方法, 深拷贝方法, 浅拷贝方法等。

几种方法都可以实现拷贝操作, 具体区别在于两点:1.代码写法不同。 2.内存地址引用不同

代码演示:

 import copy
li = ['li', [100, 200, 300]]
li_1 = li[:] # 切片方法
li_2 = list(li) # 工厂方法
li_3 = copy.copy(li) # 浅拷贝
li_4 = copy.deepcopy(li) # 深拷贝
print('li', li, 'id:', id(li))
print('li1', li_1, 'id:', id(li_1))
print('li2', li_2, 'id:', id(li_2))
print('li3', li_3, 'id:', id(li_3))
print('li4', li_4, 'id:', id(li_4)) # 运行结果
# li ['li', [100, 200, 300]] id: 47813336
# li1 ['li', [100, 200, 300]] id: 47814096
# li2 ['li', [100, 200, 300]] id: 47513768
# li3 ['li', [100, 200, 300]] id: 47508656
# li4 ['li', [100, 200, 300]] id: 56333696
# 可以看到id都不一样,说明他们指向的都不是同一个列表对象
# 将除深拷贝以外任意一个方法的‘100’,重新赋值为400, 再次运行结果为
li_2[1][0] = 400
print('li', li, 'id:', id(li))
print('li1', li_1, 'id:', id(li_1))
print('li2', li_2, 'id:', id(li_2))
print('li3', li_3, 'id:', id(li_3))
print('li4', li_4, 'id:', id(li_4))
# li ['li', [400, 200, 300]] id: 56332976
# li1 ['li', [400, 200, 300]] id: 56333736
# li2 ['li', [400, 200, 300]] id: 56033528
# li3 ['li', [400, 200, 300]] id: 56028416
# li4 ['li', [100, 200, 300]] id: 56333696
# 可以看到:只改变了一个列表而除deepcopy之外其他的列表对象都变成的‘400’
print('li', li, 'id:', id(li))
print('li1', li_1, 'id:', id(li_1))
print('li2', li_2, 'id:', id(li_2))
print('li3', li_3, 'id:', id(li_3))
print('li4', li_4, 'id:', id(li_4))

因为除deepcopy之外其它的拷贝方法都只是拷贝了列表中对象的引用,再开辟一块新的内存来储存,如果其中一个数据变了, 其他的也会跟着改变。

而deepcopy是拷贝的对象本身, 一旦拷贝过来, 则与之前的被拷贝者没有任何关系(自己改变与原来的数组无关,原来的数组改变与自己无关)

萧伯纳说:“你有一个苹果,我有一个苹果,彼此交换一下,我们彼此仍然是各有一个苹果;但是你有一种思,我有一种思想,彼此交换一下,才发现从不同角度看到的问题远比本身更深刻,所以多交流多沟通是我们提高自我能力的一种方式!!!

如果你有更好更简单的方法,请一定评论谢谢!!!

最新文章

  1. Android 学习第12课,应用出错信息
  2. 【学习笔记】Y2-1-1 Oracle数据库基础
  3. Gunicorn 问题
  4. 在使用sqlite时淌过的坑
  5. BKDRhash实现
  6. c# sqlserver备份还原(转)
  7. material design 图标制作参数
  8. Delphi在StatusBar上绘制ProgressBar
  9. 使用数字签名实现数据库记录防篡改(Java实现)
  10. 求m和n的最大公约数和最小公倍数
  11. 在Myeclipse中用Java语言操作mysql数据库
  12. NOIP2017SummerTraining0720
  13. Go变量逃逸分析
  14. 2018-2019-2 20165336《网络对抗技术》Exp0 Kali安装 Week1
  15. sklearn中树模型可视化的方法
  16. H5 32-百度首页
  17. 流畅的python笔记
  18. 关于TP5.0搜索后分页
  19. 内存分布图,errno
  20. python中的面向对象学习以及类的继承和继承顺序

热门文章

  1. Docker简易安装及命令实例
  2. PAT(B) 1085 PAT单位排行(Java:20分)
  3. 一行代码让3D翻转后的文本恢复清晰
  4. Different Subsets For All Tuples CodeForces - 660E (组合计数)
  5. Linux虚拟机设置静态ip
  6. python逻辑编程之kanren
  7. 【洛谷 P3975】 [TJOI2015]弦论(后缀自动机)
  8. mysql 数据库 规范
  9. SpringMVC、SpringFox和Swagger整合项目实例
  10. Jmeter学习笔记(十三)——xpath断言