数据类型总结,深浅拷贝

数据类型总结,深浅拷贝

存一个值还是多个值

  1. 一个值:整型,浮点型,字符串
  2. 多个值:列表,元祖,字典,集合

有序 or 无序

  1. 有序:字符串,列表,元祖
  2. 无序:字典,集合

可变 or 不可变

  1. 可变:列表,字典,集合

  2. 不可变:整型,浮点型,字符串

浅拷贝和深拷贝的区别(只针对可变类型)

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不变,两者互相独立,没有太大的关系

原文地址:https://www.cnblogs.com/lucky75/p/10922413.html