深、浅拷贝
知识点
概念
引用
在复制一个变量时,只复制它的引用方式,而没有重新开辟空间来存放它引用的数据,当被复制变量发生变化时,新的变量数据也会同时发生变化。
1
2
3a = [1,2]
b = a
a.append(3) # a变则b变浅拷贝:
在拷贝一个变量时,重新开辟空间来存放它内部数据的引用方式,当内部引用的数据发生变化时,拷贝后的对象同时发生变化。通过copy中的copy方式复制变量:a=copy.copy(b)
1
2
3
4
5
6
7
8
9
10
11a = [1,2]
b = [3,4]
c = [a,b]
d = copy.copy(c)
a.append(3) # 拷贝地址的内容发生变化,则d发生变化
c.append((1,2)) # 拷贝的对象发生变化,d不变
e = c[:] # 利用切片达到的结果等同于e = copy.copy(c)
# 字典中也有个方法copy
personal = dict(name = "wuxiang", age=27)
copy_data = personal.copy() # 此处的copy也是浅拷贝深拷贝:
在拷贝一个变量时,重新开辟空间存放它所有最底层引用的数据,新变量和被复制的变量的数据之间都是独立的,彼此之间互不影响。通过copy中的deepcopy方式复制变量,a = copy.deepcopy(b)
注意:
如果拷贝元组的内容是不可变类型数据,则copy.copy和copy.deepcopy拷贝的结果都是原元组的引用指向
如果拷贝元组的内容是可变类型数据,则copy.copy拷贝的是原元组的引用指向,而copy.deepcopy开辟空间存放元组最底层的所有数据
作业
- (问答)论述到深、浅拷贝时,说到【引用拷贝】,请简述【引用拷贝】的概念
- (问答)论述到深、浅拷贝时,说到【浅拷贝】,请简述【浅拷贝】的概念
- (问答)论述到深、浅拷贝时,说到【深拷贝】,请简述【深拷贝】的概念
- 现有变量c,对其进行浅拷贝为a
- 现有变量c,对其进行深拷贝为a
- (问答)字典对象有方法copy(),用于拷贝该字典对象,请问此方法拷贝的结果是哪种拷贝方式
- (问答)针对元组的深、浅拷贝有什么异同点