python中的赋值与深浅拷贝

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,这种拷贝叫深拷贝

你可能感兴趣的:(python)