Python中浅拷贝和深拷贝

浅拷贝

浅拷贝只拷贝一层,当列表中有嵌套时,嵌套的列表是指向而不是拷贝

1
2
3
4
5
6
7
8
9
10
11
12
13
x=[1,2,[3,4],5]
y=x.copy()
print('列表x的值为:',x) #列表x的值为: [1, 2, [3, 4], 5]
print('列表y的值为:',y) #列表y的值为: [1, 2, [3, 4], 5]
x[2][0]=100
print('列表x修改后,列表x的值为:',x) #列表x修改后,列表x的值为: [1, 2, [100, 4], 5]
print('列表x修改后,列表y的值为:',y) #列表x修改后,列表y的值为: [1, 2, [100, 4], 5]
#当修改列表x第一层时因为数据是拷贝过去的,所以对y无影响;
#当修改列表x第二层时因为数据是指向,当修改列表x时,y也跟着修改

# 浅拷贝方法
1. 用copy函数
2. 引用copy模块,用copy模块里的copy函数

深拷贝

深拷贝是对列表所有数据都拷贝,新列表和原列表没有一点关系

1
2
3
4
5
6
7
8
9
import copy
x=[1,2,[3,4],5]
y=copy.deepcopy(x)
print('列表x的值为:',x) #列表x的值为: [1, 2, [3, 4], 5]
print('列表y的值为:',y) #列表y的值为: [1, 2, [3, 4], 5]
x[2][0]=100
print('列表x修改后,列表x的值为:',x) #列表x修改后,列表x的值为: [1, 2, [100, 4], 5]
print('列表x修改后,列表y的值为:',y) #列表x修改后,列表y的值为: [1, 2, [3, 4], 5]
# 深拷贝只能用copy模块里的deepcopy函数进行拷贝