数据类型总结,深浅拷贝
存一个值还是多个值
- 一个值:整型,浮点型,字符串
- 多个值:列表,元祖,字典,集合
有序 or 无序
- 有序:字符串,列表,元祖
- 无序:字典,集合
可变 or 不可变
-
可变:列表,字典,集合
-
不可变:整型,浮点型,字符串
浅拷贝和深拷贝的区别(只针对可变类型)
1.拷贝:
lis = [1,2,3,4]
lis2 = lis
lis.append(5)
print(lis)
print(lis2)
[1, 2, 3, 4, 5]
[1, 2, 3, 4, 5]
2.浅拷贝
import copy
lis = [1,[3, 4]]
lis2 = copy.copy(lis)
print(lis)
print(lis2)
lis.append(2)
print(lis)
print(lis2)
lis[1].append(5)
print(lis)
print(lis2)
[1, [3, 4]]
[1, [3, 4]]
[1, [3, 4], 2]
[1, [3, 4]]
[1, [3, 4, 5], 2]
[1, [3, 4, 5]]
3.深拷贝
l1 = [1, [2, 3]]
l2 = copy.deepcopy(l1)
print(l1)
print(l2)
l1.append(2)
print(l1)
print(l2)
l1[1].append(5)
print(l1)
print(l2)
[1, [2, 3]]
[1, [2, 3]]
[1, [2, 3], 2]
[1, [2, 3]]
[1, [2, 3, 5], 2]
[1, [2, 3]]
总结:
这些只是一种现象.
拷贝:共用一片内存,l1发生改变则l2也会发生改变,因为l1是可变类型
浅拷贝:另外开辟内存,共用其中元素的地址,当l1内部的不可变对象发生改变时,l2不发生改变,因为该元素的地址变了.当l1内部的可变对象发生了改变时,l2随之改变,因为地址不变
深拷贝;另外开辟内存,共用元素中不可变对象的地址,l1改变,l2不变,两者互相独立,没有太大的关系