from copy import copy, deepcopy
a = [1, 2, 3, 4, ['a', 'b']] # a = [1, 2, 3, 4, ['a', 'b']]
b = a # b = [1, 2, 3, 4, ['a', 'b']]
c = copy(a) # c = [1, 2, 3, 4, ['a', 'b']]
d = deepcopy(a) # d = [1, 2, 3, 4, ['a', 'b']]
a.append(5)
# a = [1, 2, 3, 4, ['a', 'b'], 5]
# b = [1, 2, 3, 4, ['a', 'b'], 5]
# c = [1, 2, 3, 4, ['a', 'b']]
# d = [1, 2, 3, 4, ['a', 'b']]
a[4].append('c')
# a = [1, 2, 3, 4, ['a', 'b', 'c'], 5]
# b = [1, 2, 3, 4, ['a', 'b', 'c'], 5]
# c = [1, 2, 3, 4, ['a', 'b', 'c']]
# d = [1, 2, 3, 4, ['a', 'b']]
d[4].append('x')
# a = [1, 2, 3, 4, ['a', 'b', 'c'], 5]
# b = [1, 2, 3, 4, ['a', 'b', 'c'], 5]
# c = [1, 2, 3, 4, ['a', 'b', 'c']]
# d = [1, 2, 3, 4, ['a', 'b', 'x']]
a = [1,2,3,4,['a','b']] 代表在内存中开辟了一片空间,里面是[1,2,3,4,['a','b']],并用变量a指向了这片空间
b = a 代表b指向了变量a的引用,也就是a和b现在指向了同一片空间,当任意a或b对这片空间的列表进行修改,另一个也跟着修改,因为此时a就是b,b就是a,a与b的内存地址是一致的
c = copy(a) 代表把a指向的内容复制一份给c,也就是c指向了内存中复制出来的这片空间,此时对a或b这个列表进行修改不会对c产生影响,但此时只是浅拷贝,如果对a或b中的列表进行修改,则c也会跟着修改
d = deepcopy(a) 代表把a指向的内容完全拷贝一份赋值给d,此时的d与a,b,c没有任何关系,只是内容一样,无论a,b,c怎么修改,都不会影响到d,反之,无论d怎么修改,也不会影响到a,b,c,这种拷贝叫深拷贝