最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • python赋值是拷贝还是引用

    正文概述    2020-06-12   531

    python赋值是拷贝还是引用

    变量。对象和引用

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

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

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

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

    #不可变对象的例子
    name="bill"
    name+="Bob"

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

    list1=[1,2,3,4]
    tuple1=(1,list1)

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

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

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

    list1=[1,2,3,4]
    list2=['hello',list1]
    dict1={'list1':list1}

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

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

    注意:只有deepcopy是深拷贝,其余没有显示说明的全都是浅拷贝!更多学习内容,请点击python学习网。


    起源地下载网 » python赋值是拷贝还是引用

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元