python 深拷贝 和 浅拷贝

做牛客时碰到的问题

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, 那么深拷贝浅拷贝是一样的, 修改原对象,不会对新对象产生影响,
  • 而对于可变对象, 深拷贝把值复制了, 那么改变原来的对象, 新对象不会改变,,但是浅拷贝不一样,浅拷贝只拷贝了可变对象的引用,所以改变原对象的 可变数据, 那么新对象也会改变

你可能感兴趣的:(python 深拷贝 和 浅拷贝)