1. 前言
当给一个对象赋值(或者将其作为参数传递,或者作为结果返回时)时,Python(像Java一样)使用了一个指向源对象的引用,并不是真正的拷贝。其他一些语言则在每次赋值是都进行拷贝操作。Python从来不为赋值操作进行“隐式”的拷贝:要得到一个拷贝,必须明确地要求,需要的是拷贝。
2. 浅拷贝与深拷贝
浅拷贝:
import copy new_list = copy.copy(existing_list)
深拷贝:
import copy new_list_of_dicts = copy.deepcopy(existing_list_of_dicts)
深拷贝会把对象中的属性和内容分别地和递归地拷贝。
3. 其他的浅拷贝
如果已经知道要拷贝的对象类型,那我们有另一些方法实现相同的功能。对于列表L,调用list(L);对于字典d,调用dict(d)。
同时,记住:没有必要拷贝那些不可改变的对象(字符串、数字、元组等),因为完全不用担心会不经意改动它们。如果尝试进行拷贝操作,仍然会得到原对象,当然这也不会有太大害处,只不过浪费了一些时间和代码。
Leave a Reply