天天看点

Python3入门之——浅拷贝和深拷贝

由于Python使用了对象引用,因此在使用赋值操作符(=)时,并没有进行赋值操作。如果右边的操作数是字面值,比如字符串或数字,那么左边的操作数被设置为一个对象引用,该对象引用将指向存放字面值的内存对象。如果右边的操作数是一个对象引用,那么左边的操作数将设置为一个对象引用,并与右边的操作数指向相同的对象。

Python3入门之——浅拷贝和深拷贝
Python3入门之——浅拷贝和深拷贝

浅拷贝

如果需要组合类型数据(或其他可变对象)的一个单独副本。对于序列,在提取数据片时,数据片总是取自某个数据项的一个单独副本。

Python3入门之——浅拷贝和深拷贝

对于字典与集合而言,这种复制操作可以使用dict.copy()与set.copy()来实现。此外,copy模块提供了copy.copy()函数,该函数返回给定对象的一个副本。对内置组合数据类型进行复制的另一种方法是使用类型名作为函数,将待复制的组合类型数据作为参数。

Python3入门之——浅拷贝和深拷贝

这些复制技术都是浅拷贝,复制的只是对象引用,而非对象本身。对固定数据类型,比如数字与字符串,这与赋值的效果是相同的。但是对于可变的数据类型,比如嵌套的组合类型,这意味着相关对象同时被原来的组合与复制得来的组合应用。

Python3入门之——浅拷贝和深拷贝

深拷贝

Python3入门之——浅拷贝和深拷贝