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

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

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

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

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

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

  5. python中的copy.copy和copy.deepcopy

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

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

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

  7. Python 传值和传址 copy/deepcopy

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

  8. copy deepcopy辨析

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

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

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

随机推荐

  1. 在MVC中加载view(点开链接)的方式

    主要有: Html.ActionLink Html.RenderPartial Html.RenderAction Html.Partial AJAX.ActionLink load 浏览器对象模型 ...

  2. ES6中set和map的区别

    Set ES6提供了新的数据结构Set.它类似于数组,但是成员的值都是唯一的,没有重复的值. Set函数可以接受一个数组(或类似数组的对象)作为参数,用来初始化. // 例一 var set = ne ...

  3. UVA 11600 Masud Rana(概率dp)

    当两个城市之间有安全的道路的时候,他们是互相可到达的,这种关系满足自反.对称和传递性, 因此是一个等价关系,在图论中就对应一个连通块. 在一个连通块中,当前点是那个并不影响往其他连通块的点连边,因此只 ...

  4. python_29_三级菜单2

    menu={'河北':{ '石家庄':{ '平山':{ '县城':{}, '寨北':{}, '苏家庄':{}, }, '灵寿':{}, '鹿泉':{} }, }, '北京':{ '昌平':{ '沙河' ...

  5. 漫谈 Clustering (番外篇): Dimensionality Reduction

    由于总是有各种各样的杂事,这个系列的文章竟然一下子拖了好几个月,(实际上其他的日志我也写得比较少),现在决定还是先把这篇降维的日志写完.我甚至都以及忘记了在这个系列中之前有没有讲过“特征”(featu ...

  6. Python判断一个数是否为小数

    一.判断一个数是否为小数 1.有且仅有一个小数点 2.小数点的左边可能为正数或负数 3.小数点的右边为正数 二.实现代码 def is_float(str): if str.count('.') == ...

  7. R+hadoop

    这里面的配置 http://www.rdatamining.com/big-data/r-hadoop-setup-guide root@kali:~/hadoop_home/hadoop-1.2.1 ...

  8. 牛客小白月赛1 G あなたの蛙は旅⽴っています【图存储】【DP】

    题目链接:https://www.nowcoder.com/acm/contest/85/G 思路: DP 空间可以优化成一维的, 用一维数组的 0 号单元保存左斜对角的值即可. 存图这里真不好理解 ...

  9. 洛谷P3371单源最短路径Dijkstra版(链式前向星处理)

    首先讲解一下链式前向星是什么.简单的来说就是用一个数组(用结构体来表示多个量)来存一张图,每一条边的出结点的编号都指向这条边同一出结点的另一个编号(怎么这么的绕) 如下面的程序就是存链式前向星.(不用 ...

  10. JS - Object.create(prototype)方法

    用Object.create(prototype)方法创建一个对象,这个对象的原型将指向这个传入的prototype参数