做牛客时碰到的问题
In [23]: a = {1:[]}
In [24]: c = deepcopy(a)
In [25]: b = copy(a)
In [26]: a[1].append(1)
In [27]: a
Out[27]: {1: [1]}
In [28]: b
Out[28]: {1: [1]}
In [29]: c
Out[29]: {1: []}
In [13]: a = {1:1} # key 是1的对象是一个不可变对象,
In [14]: b = copy(a) # 浅拷贝
In [15]: c = deepcopy(a) #深拷贝
In [16]: a
Out[16]: {1: 1}
In [17]: b
Out[17]: {1: 1}
In [18]: c
Out[18]: {1: 1}
总结:
- 对于不可变对象,比如str, int, 那么深拷贝浅拷贝是一样的, 修改原对象,不会对新对象产生影响,
- 而对于可变对象, 深拷贝把值复制了, 那么改变原来的对象, 新对象不会改变,,但是浅拷贝不一样,浅拷贝只拷贝了可变对象的引用,所以改变原对象的 可变数据, 那么新对象也会改变
网友评论