在python中,对象赋值操作不复制对象,这样新的变量会指向原来的对象。如果对象是可变的,例如列表和字典,则就会出现修改一个变量就改变了另外变量的情况,因为它们指向同一上对象,修改任何一个变量实际上都是在改同一个对象。
例如:
>>>s=[1,2,3,4]
>>>a=s
>>>a[3]=100
>>>a
[1,2,3,100]
>>>s
[1,2,3,100]
尽管没有修改s,但s变了。
原因是,s和a,都指向同一个对象。
有的时候,我们只想修改一个,不想另一个也发生变化。
这个时候,需要用到copy模块。
copy模块有两个函数:copy和deepcopy。
上面的例子中,我们这样来得到a,a和s就指向不同的对象,修改一个就不会影响另一个了:
>>>import copy
>>>a=copy.copy(s)
如果s的元素,有的还是对象(比如列表),则使用deepcopy:
>>>a=copy.deepcopy(s)
s的元素中没有对象,用deepcopy也没有关系,不过最好用copy。
网友评论