1. import copy
  2.  
  3. 字典参照列表结论,看是否有深层嵌套。
  4. a = {'name':1,'age':2}
  5. b = a
  6. a['name'] = 'ff'
  7. print(a)
  8. print(b)
  9. print(id(a),id(b))
  10.  
  11. a = {'name':1,'age':2}
  12. b = copy.deepcopy(a)
  13. a['name'] = 'ff'
  14. print(a)
  15. print(b)
  16. print(id(a),id(b))
  17. """
  18. {'name': 'ff', 'age': 2}
  19. {'name': 'ff', 'age': 2}
  20. 4301093048 4301093048
  21. {'name': 'ff', 'age': 2}
  22. {'name': 1, 'age': 2}
  23. 4301093120 4302783256
  24. """
  25.  
  26. 字符串和元组等不可变数据类型,打死都不变
  27. a = 'ff'
  28. b = a
  29. a = 'ff1'
  30. print(a,b) # ff1 ff
  31.  
  32. a = 'ff'
  33. b = copy.copy(a)
  34. a = 'ff1'
  35. print(a,b) # ff1 ff
  36.  
  37. a = 'ff'
  38. b = copy.deepcopy(a)
  39. a = 'ff1'
  40. print(a,b) # ff1 ff
  41.  
  42. a = [1,2,3]
  43. b = [4,5,6]
  44. c = [a,b]
  45. d = c
  46. print(id(c),id(d)) # 4322641352 4322641352
  47. c.append(9)
  48. print(c) # [[1, 2, 3], [4, 5, 6], 9]
  49. print(d) # [[1, 2, 3], [4, 5, 6], 9]
  50. print(id(c),id(d)) # 4322641352 4322641352
  51.  
  52. d = copy.copy(c)
  53. c.append(9)
  54. print(c) # [[1, 2, 3], [4, 5, 6], 9]
  55. print(d) # [[1, 2, 3], [4, 5, 6]]
  56. c[0].append(8)
  57. print(c) # [[1, 2, 3, 8], [4, 5, 6]]
  58. print(d) # [[1, 2, 3, 8], [4, 5, 6]]
  59. 如果只是copy的话,copy.copy() 针对外层依旧是深拷贝,但对内层来讲就是浅拷贝了,会改变值。
  60.  
  61. d = copy.deepcopy(c)
  62. c.append(9)
  63. print(c) # [[1, 2, 3], [4, 5, 6], 9]
  64. print(d) # [[1, 2, 3], [4, 5, 6]]
  65. c[0].append(8)
  66. print(c) # [[1, 2, 3, 8], [4, 5, 6]]
  67. print(d) # [[1, 2, 3], [4, 5, 6]]
  68. 深拷贝, 不管你是啥,只要copy.deepcopy()了。 不管你变不变,我变我是狗。

copy&deepcopy

copy&deepcopy的更多相关文章

  1. Python面试题之copy/deepcopy详解

    copy和deepcopy有什么区别? http://blog.csdn.net/qq_32907349/article/details/52190796 http://iaman.actor/blo ...

  2. copy.copy()与copy.deepcopy()的详解

    copy.copy() 元组和列表调用这个方法效果也不一样. 元组的效果: a = [1,2,3] b = [4,5,6] c = (a,b) e = copy.copy(c) 可以看到:e和c是指向 ...

  3. Python 浅拷贝copy()与深拷贝copy.deepcopy()

    首先我在这介绍两个新的小知识,要在下面用到.一个是函数 id() ,另一个是运算符 is.id() 函数就是返回对象的内存地址:is 是比较两个变量的对象引用是否指向同一个对象,在这里请不要和 == ...

  4. python中的copy.copy和copy.deepcopy

    一个例子就搞清楚 import copy a = [1, 2, 3, 4, ['a', 'b']] #原始对象 b = a #赋值,传对象的引用 c = copy.copy(a) #对象拷贝,浅拷贝 ...

  5. Python 函数参数引用(传值/传址)/copy/deepcopy

    精简版: 传值:被调函数局部变量改变不会影响主调函数局部变量 传址:被调函数局部变量改变会影响主调函数局部变量 Python参数传递方式:传递对象引用(传值和传址的混合方式),如果是数字,字符串,元组 ...

  6. Python 传值和传址 copy/deepcopy

    传值:被调函数局部变量改变不会影响主调函数局部变量 传址:被调函数局部变量改变会影响主调函数局部变量 Python参数传递方式:传递对象引用(传值和传址的混合方式),如果是数字,字符串,元组则传值:如 ...

  7. copy deepcopy辨析

    copy deepcopy讲的是复制源对象的改变对copy出来的对象的影响: 我们寻常意义的复制就是深复制,即将被复制对象完全再复制一遍作为独立的新个体单独存在. 所以改变原有被复制对象不会对已经复制 ...

  8. copy & deepcopy

    1 import copy 2 3 字典参照列表结论,看是否有深层嵌套. 4 a = {'name':1,'age':2} 5 b = a 6 a['name'] = 'ff' 7 print(a) ...

  9. [Python] 等号赋值, copy, deepcopy的区别

    参考链接: 1. 介绍python中的可变类型与不可变类型:https://blog.csdn.net/answer3lin/article/details/86430074 (也可以参考转载博客 P ...

随机推荐

  1. Codeforces 890C - Petya and Catacombs 模拟

    C. Petya and Catacombstime limit per test1 secondmemory limit per test256 megabytesinputstandard inp ...

  2. UWP Flyout浮动控件

    看见没,点击"Options"按钮,浮动出来一个界面,这个界面可以用xaml自定义. 如果要点击的控件又Flyout属性那么,可以直接按照下面用 <Button Conten ...

  3. java 事件处理

    Java事件处理机制:EventObject类作为描述事件信息的事件信息类的基类,由EventListener接口派生新的接口或类来作为事件接收方的类,再定义事件源类. 事件信息类的构造方法必须含有事 ...

  4. 基于Java使用Snmp4j进行监控与采集(snmptrap、snmpwalk、snmpget)

    之前有在弄监控服务器这块的工作,今天来整体总结下.因为有些服务器(路由器.交换机等都是基于snmp协议的)必须使用snmp协议去监控采集和接收信息,所以必须去了解snmp相关内容,以及如何在基于jav ...

  5. poj 2271HTML

    poj2271 HTML Description If you ever tried to read a html document on a Macintosh, you know how hard ...

  6. es6+require混合开发,兼容es6 module,import,export

    近一年,一直很忙,做了不少的项目,不过都不是太满意,毕竟是别人的作品,不好意思写出来.最近打算开发一个es6的项目,项目中用到require,本文主要讲解es6的module规范怎么与require的 ...

  7. 495A - Digital Counter

    A. Digital Counter time limit per test 1 second memory limit per test 256 megabytes input standard i ...

  8. 利用反射操作bean的属性和方法

    今天在开发中碰到这样一个场景:当请求添加项目下的目录时,传过来的是一个IndexModel,这个Model里有关于这个目录字段的详细信息,包括基础报表,实时,漏斗等信息(这些字段类型都是boolean ...

  9. 使用Mkdocs构建你的项目文档

    使用Mkdocs构建你的项目文档 环境搭建 安装必需软件 作者是在windows下安装的,如果是linux或mac用户,官网有更详细的安装说明. windows 10 x64 当然还有广大的windo ...

  10. mybatis转义符(转)

    第一种方法: 用了转义字符把>和<替换掉,然后就没有问题了. SELECT * FROM test WHERE 1 = 1 AND start_date  <= CURRENT_DA ...