2010年7月12日星期一

Python学习笔记--引用vs复制

Python中,变量的都是默认存储对象的引用,而不是对象本身。例如:

>>> X = [1, 2, 3]

>>> L = ['a', X, 'b'] # Embed references to X's object.

>>> D = {'x':X, 'y':2}

这里X,L,D三个变量中的引用都指向了同一个对象[1,2,3],在其中任意一个修改,都会影响其他的变量。
有时候我们可能并不希望出现这样的情况,我们可能需要每个变量中都有一个对象的单独拷贝。实现方法如下:



  • * 使用无限制的slice来拷贝sequence对象,eg:A = L[:]

  • * 对于Dictionary,使用copy函数来实现对象拷贝 eg:B = D.copy()

  • * 一些函数也会产生对象的拷贝,例如list

  • * 标准库copy可以用来完成完全的拷贝, eg:import copy,然后调用X=copy.deepcopy(Y);



值得注意的是,前面的第一二种方法得到的拷贝,都是最高层的拷贝,而并部拷贝嵌套的数据结构,如果要彻底的拷贝,就可以使用最后一种方法,他是递归的拷贝所有的嵌套的对象。

没有评论:

发表评论