1、copy()方法用来拷贝列表元素

1 a = [1, 2, 3]
2 # 拷贝
3 b = a.copy()
4 print('a = ', a, '\n', 'b = ', b)
5
6 # 执行结果:
7 # a = [1, 2, 3]
8 # b = [1, 2, 3]

2、copy()方法执行的是深拷贝,b = a.copy(),b将指代内存中的另一个与a不同的位置, 在不存在列表嵌套的情况下,在a或者b任何一方的任何操作对另一方没有影响

 1 a = [1, 2, 3]
 2 # 拷贝
 3 b = a.copy()
 4 print('a = ', a, '\n', 'b = ', b)
 5
 6 #修改a[0]和b[1]的值
 7 a[0] = 0
 8 b[1] = 1
 9 print('a = ', a, '\n', 'b = ', b)
10
11
12 # 执行结果:
13 # a = [1, 2, 3]
14 # b = [1, 2, 3]
15
16 # 修改a[0]和b[1]后:
17 # a =  [0, 2, 3]
18 # b =  [1, 1, 3]

3、存在列表嵌套情况下的copy(),结果与情况2有不同

 1 a = [1, [2, 2, 2], 3]
 2 # 拷贝
 3 b = a.copy()
 4 print('a = ', a, '\n', 'b = ', b)
 5
 6 #修改a[1][0]、b[1][2]和b[2]的值
 7 a[1][0] = 0
 8 b[1][2] = 0
 9 b[2] = 1
10 print('a = ', a, '\n', 'b = ', b)
11
12
13 # 执行结果:
14 # a =  [1, [2, 2, 2], 3]
15 # b =  [1, [2, 2, 2], 3]
16
17 # 修改a[1][0]、b[1][2]和b[2]后:
18 # a =  [1, [0, 2, 0], 3]
19 # b =  [1, [0, 2, 0], 1]

可以看见,凡是对列表内嵌套的列表的值进行了修改,那么无论修改a还是b都会对另一方有影响,如修改a[1][0]和b[1][2]则a和b的[1][0]和[1][2]位置的值都被修改了,而非嵌套列表的值则无影响,如修改b[2]对a[2]的值没有影响。

出现这种情况的原因是,主列表a只存储了嵌套列表在内存中的地址,而不是嵌套列表的数据,copy()方法也只是将该地址复制到b中,但是由于a和b的这两个地址都指向内存的同一区域,故对该区域的任何操作都会对a和b有共同影响

4、有一个copy模块提供与python内置的copy()方法相同的功能

 1 import copy
 2
 3 a = [1, [2, 2, 2], 3]
 4 # 调用copy模块的copy函数
 5 b = copy.copy(a)
 6 print('a = ', a, '\n', 'b = ', b)
 7
 8 #修改a[1][0]、b[1][2]和b[2]的值
 9 a[1][0] = 0
10 b[1][2] = 0
11 b[2] = 1
12 print('a = ', a, '\n', 'b = ', b)
13
14
15 # 执行结果:
16 # a =  [1, [2, 2, 2], 3]
17 # b =  [1, [2, 2, 2], 3]
18
19 #修改a[1][0]、b[1][2]和b[2]后:
20 # a =  [1, [0, 2, 0], 3]
21 # b =  [1, [0, 2, 0], 1]

5、可使用copy模块的deepcopy()方法进行彻底的深度拷贝,即不管有没有列表嵌套,在任何一方的任何操作都对另一方没有影响

 1 import copy
 2
 3 a = [1, [2, 2, 2], 3]
 4 # 调用copy模块的deepcopy函数
 5 b = copy.deepcopy(a)
 6 print('a = ', a, '\n', 'b = ', b)
 7
 8 #修改a[1][0]、b[1][2]和b[2]的值
 9 a[1][0] = 0
10 b[1][2] = 0
11 b[2] = 1
12 print('a = ', a, '\n', 'b = ', b)
13
14
15 # 执行结果:
16 # a =  [1, [2, 2, 2], 3]
17 # b =  [1, [2, 2, 2], 3]
18
19 #修改a[1][0]、b[1][2]和b[2]后:
20 # a =  [1, [0, 2, 2], 3]
21 # b =  [1, [2, 2, 0], 1]

参考自:https://blog.csdn.net/lhw413/article/details/72807834

转载于:https://www.cnblogs.com/latup/p/9573051.html

python中的浅拷贝与深拷贝——copy()相关推荐

  1. Python中的浅拷贝和深拷贝(一看就懂!!!)

    浅拷贝和深拷贝一直傻傻的分不清,甚至有时候会理解反.今天就简单总结一下python中的浅拷贝和深拷贝. 总结 最直观的理解就是: 1.深拷贝,拷贝的程度深,自己新开辟了一块内存,将被拷贝内容全部拷贝过 ...

  2. Python中的浅拷贝与深拷贝

    编者注:本文主要参考了<Python核心编程(第二版)> 以下都是参考资料后,我自己的理解,如有错误希望大家不吝赐教. 大家有没有遇到这样一种情况,对象赋值后,对其中一个变量进行修改,另外 ...

  3. python中的浅拷贝和深拷贝

    赋值 赋值即对象的引用 original_list = [1,2,3,['a','b']] assignment_list = original_list#修改原对象的值,赋值对象也改变 origin ...

  4. js 浅拷贝直接赋值_JS中实现浅拷贝和深拷贝的代码详解

    (一)JS中基本类型和引用类型 JavaScript的变量中包含两种类型的值:基本类型值 和 引用类型值,在内存中的表现形式在于:前者是存储在栈中的一些简单的数据段,后者则是保存在堆内存中的一个对象. ...

  5. 【转】JAVA中的浅拷贝和深拷贝

    原文网址:http://blog.bd17kaka.net/blog/2013/06/25/java-deep-copy/ JAVA中的浅拷贝和深拷贝(shallow copy and deep co ...

  6. python浅拷贝_Python中的浅拷贝和深拷贝

    本文翻译自copy in Python (Deep Copy and Shallow Copy),讲述了在Python语言中浅拷贝与深拷贝的不同用法.全文系作者原创,仅供学习参考使用,转载授权请私信联 ...

  7. python 实例对象 浅拷贝_Python对象中的浅拷贝和深拷贝

    Python部落(python.freelycode.com)组织翻译,禁止转载,欢迎转发. Python中的赋值语句不会创建对象的副本,而只是给对象绑定了新的名称.对于不可变对象,这通常没什么区别. ...

  8. Python赋值、浅拷贝、深拷贝

    一.赋值(assignment) >>> a = [1, 2, 3] >>> b = a >>> print(id(a), id(b), sep= ...

  9. Python 赋值、浅拷贝、深拷贝的区别?

    http://songlee24.github.io/2014/08/15/python-FAQ-02/ 在写Python过程中,经常会遇到对象的拷贝,如果不理解浅拷贝和深拷贝的概念,你的代码就可能出 ...

最新文章

  1. XML 特殊字符处理和 CDATA
  2. 法国拟将雷诺与日产合并 代表团抵日进行谈判
  3. 《高级无线网络—4G技术》——1.3 混合4G无线网络协议
  4. poj 2947 Widget Factory
  5. 三个变量互换值_02-Python基础知识学习-------Python变量
  6. oracle时区参考表,ORACLE 时区
  7. I had no sooner finished eating than went to toilet.
  8. XGBClassifier()特征选择
  9. [SimplePlayer] 2. 在屏幕上显示视频图像
  10. 双语经典:告别单身的必杀技之情话连篇
  11. Seata多微服务互相调用_全局分布式事物使用案例_业务数据库准备---微服务升级_SpringCloud Alibaba工作笔记0059
  12. ajax communication failed,AJAX没有收到错误
  13. netsh winsock reset什么意思_IOS14.2rc是什么意思?ios14.2rc怎么样?[多图]-手机资讯...
  14. 【STL源码剖析读书笔记】自己实现stack之MyStack(底层用MyList)
  15. ListView优化之ViewHolder
  16. 惠普179fnw打印机使用说明_惠普179fnw驱动下载
  17. 【语音增强论文解读 03】TCNN: TEMPORAL CONVOLUTIONAL NEURAL NETWORK FOR REAL-TIME SPEECHENHANCEMENT IN THE TIME
  18. linux系统 用优盘启动流程,制作u盘启动linux系统
  19. 习题3第五题:分析习题2第四题所述的患者监护系统。试用实体联系图描绘本系统的数据对象,画出本系统的顶层IPO图。
  20. 判断当前是在ie还是谷歌

热门文章

  1. For each...in / For...in / For...of 的解释与例子
  2. Android Json解析与总结
  3. 在CentOS6.x下安装Compiz——桌面立方体,特效种种
  4. 【转】怎样判断自己掌握了学到的新知识
  5. 在一个200*20的bmp中写汉字
  6. 编译安装mysqld php服务 安装论坛
  7. 帝国cms与mysql数据库_帝国CMS下在PHP文件中调用数据库类执行SQL语句实例
  8. vasp软件_量子力学分子动力学软件包-VASP
  9. shell的执行流控制
  10. 手把手教你pyqt中.qrc图片文件的编写和使用