python 16:copy模块

作者: 金石明镜 | 来源:发表于2019-11-16 21:25 被阅读0次

在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。

相关文章

网友评论

    本文标题:python 16:copy模块

    本文链接:https://www.haomeiwen.com/subject/ccruictx.html