python赋值是拷贝还是引用

  介绍

本篇文章给大家分享的是有关python赋值是拷贝还是引用,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

变量。对象和引用

python中的这些概念和c++中的有很大的不同,有些概念需要我们理解:

1, python中的变量没有类型信息,类型的概念存在于对象中而不是变量中。变量是通用的,它只是引用了一个特定的对象。这和c++中的空指针有点相似的味道。

2类型属于对象,并且对象中包含了一个引用计数器,用于记录当前有多少个变量在引用这个对象,一旦引用计数器为0,那么该对象就会被系统自动回收(这里有例外,python中缓存了一些小的常用的对象)。

3,对象有可变对象和不可变对象之分。可变对象可以被修改,有列表列表,字典字典不可变对象无法修改,有数字,字符串str,元组元组。

#不可变对象的例子   name=癰ill"   名称+=癇ob"

第一句创建一个字符串对象,并让变引量名称用该对象。按照c++中的理解,第二句试图修改名字这个字符串。但是在python中,其实新建了一个值为“billBob”的字符串对象,并让名字引用该对象。原来的值为“比尔”的字符串对象引用计数变为0,被垃圾回收系统回收。这里的可变与不可变指的是顶层对象不可变

list1=(1、2、3、4)   list1 tuple1=(1)

上面的例子中,虽然tuple1是一个元组对象(不可变),但是tuple1[1]是一个列表对象的引用,这个对象是可变的。
4, c++中使用=默认创建对象,而python中使用=默认创建引用!

numList=(1、2、3、4)   # numList2和numList引用同一个列表对象   #修改这个列表对象对这两个变量都有影响   numList2=numList

再次强调!赋值操作总是储存对象的引用! ! !这一点和c++中完全不同。

list1=(1、2、3、4)   用于=[& # 39;你好# 39;,list1]   dict1={& # 39; list1& # 39;: list1}

像上面这种情况,list1,用于[1]和dict1 (“list1”)都是同一个列表对象的引用,并且由于列表对象是可变对象,通过上面三个变量中的任意一个变量修改该列表对象都会影响到其余的变量。

如何我们确实想要复制对象而不是储存引用,有以下几种办法:1、使用切片表达式;2、使用对象的复制方法(列表\ dict); 3,通过显示地构造新的对象,例如列表(iterable); 4、复制标准库中()的副本或deepcopy ();

注意:只有deepcopy是深拷贝,其余没有显示说明的全都是浅拷贝!

以上就是python赋值是拷贝还是引用,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注行业资讯频道。

python赋值是拷贝还是引用