Python对象的比较、拷贝

时间:2020-10-16
本文章向大家介绍Python对象的比较、拷贝,主要包括Python对象的比较、拷贝使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
  • 比较操作符'=='表示比较对象间的值是否相等,而'is'表示比较对象的标识是否相等,即它们是否指向同一个内存地址。
  • 比较操作符'is'效率优于'==',因为'is'操作符无法被重载,执行'is'操作只是简单的获取对象的ID,并进行比较;而'=='操作符则会递归地遍历对象的所有值,并逐一比较。
  • 浅拷贝中的元素,是原对象中子对象的引用,因此,如果原对象中的元素是可变的,改变其也会影响拷贝后的对象,存在一定的副作用。
  • 深度拷贝则会递归地拷贝原对象中的每一个子对象,因此拷贝后的对象和原对象互不相关。另外,深度拷贝中会维护一个字典,记录已经拷贝的对象及其ID,来提高效率并防止无限递归的发生。

 下面的Python代码示例:

a = 1
b = a
a = a + 1

这里首先将1赋值于a,即a指向了1这个对象,如下面的流程图所示:

接着b = a则表示,让变量b也同时指向1这个对象。这里要注意,Python里的对象可以被多个变量所指向或引用。

最后执行a = a + 1。需要注意的是,Python的数据类型,例如整型(int)、字符串(string)等等,是不可变的。所以,a = a + 1,并不是让a的值增加1,而是表示重新创建了一个新的值为2的对象,并让a指向它。但是b仍然不变,仍然指向1这个对象。

因此,最后的结果是,a的值变成了2,而b的值不变仍然是1。

通过这个例子你可以看到,这里的a和b,开始只是两个指向同一个对象的变量而已,或者你也可以把它们想象成同一个对象的两个名字。简单的赋值b = a,并不表示重新创建了新对象,只是让同一个对象被多个变量指向或引用。

同时,指向同一个对象,也并不意味着两个变量就被绑定到了一起。如果你给其中一个变量重新赋值,并不会影响其他变量的值。

$flag 上一页 下一页