python 学习之自动化编程——DAY3-copy and deepcopy
今天和page老师学习深浅copy原理和应用,有点不是很理解,又去网上查了下相应的文章,自己总结一下如下:
针对int和str类的赋值即引用,不区分深浅copy,内存地址指向同一地址。
针对除字符串和数字以外的对象,copy 和deepcopy是不一样的。copy只copy第一层,不copy对象的属性,改变对象的属性,copy的属性一样会变化。
例如:
1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*- 3 # @File : copy.copy.py 4 # @Author: Frank 5 # @Date : 2018-04-16 6 import copy 7 dic={1:1,2:2,3:[1,2,3], 8 9 } 10 print('before',dic) 11 new_dic=copy.copy(dic) 12 dic[3][0]=50 13 print(dic) 14 print(new_dic)
输出结果:
before {1: 1, 2: 2, 3: [1, 2, 3]} {1: 1, 2: 2, 3: [50, 2, 3]} {1: 1, 2: 2, 3: [50, 2, 3]}
在第一个字典结构不变,只改变内容的情况下,第二个字典的内容随之变化,相当于两个字典指向同一个对象属性。
而如果第一/二个字典结构改变,如下:则两个字典不再指向同一个地址,则相当于改变了对象的结构。但其他部分还是指向同一个对象。
1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*- 3 # @File : copy.copy.py 4 # @Author: Frank 5 # @Date : 2018-04-16 6 import copy 7 8 dic={1:1,2:2,3:[1,2,3],} 9 #定义一个字典 10 print('before',dic) 11 #打印字典 12 new_dic=copy.copy(dic) 13 #新字典copy旧字典 14 new_dic[1]=50 15 #改变新字典的第一个key对应的value 16 new_dic[3][0]=50 17 #改变新字典第三个key对应的value内容 18 print(dic) 19 #打印旧字典 20 print(new_dic) 21 #打印新字典
输出如下:
before {1: 1, 2: 2, 3: [1, 2, 3]} #旧字典 {1: 1, 2: 2, 3: [50, 2, 3]} #旧字典key1,key2不变,key3由于指向相同的【list]】,所以跟着new—dic改变。(指向同一对象) {1: 50, 2: 2, 3: [50, 2, 3]} #打印new—dic
以上,粗浅理解,请多海涵。
另外,CSDN上看到一篇文章,转载如下:
https://blog.csdn.net/u012046327/article/details/11473143