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

原文地址:https://www.cnblogs.com/frank1126lin/p/8853967.html