设为首页 收藏本站
查看: 936|回复: 0

[经验分享] Python-变量对象引用

[复制链接]

尚未签到

发表于 2018-8-6 07:47:55 | 显示全部楼层 |阅读模式
  学习python首先要了解这三个的关系,变量、对象、引用、类型
  这个要记住:类型存在于对象、变量通过引用链接上对象
  变量在赋值的时候才创建,可以引用任何类型的对象、并且使用之前比许进行赋值。

  <center> DSC0000.jpg
  例如:
  》》:a = 3
  其实是完成了三个事情:

  1.创建了一个int类型的对象3
  2.创建了一个名为a的对象
  3.将变量名a与int类型的对象3相连接

DSC0001.jpg


  变量实际上是到对象内存空间的一个指针,变量是一个系统表的元素,拥有指向对象的链接空间。
  对象是分配的一块内存,有足够的空间去表示他们所代表的的值
  引用是自动形成的从变量到对象的指针

  记住:每一个对象都有两个东西,对象类型和引用的计数器 这连个东西决定了是否自动回收。
  对象的垃圾回收:每个对象保持了一个引用计数器,计数器记录了当前指向该对象的引用的数目,一旦这个计数器为0,这个对象的内存空间就会被自动回收。
  import sys
  print(sys.getrefcount(L)) 查看引用对少次
  

getrefcount(...)  
getrefcount(object) -> integer
  Return the reference count of object.  The count returned is generally
  one higher than you might expect, because it includes the (temporary)
  reference as an argument to getrefcount().
  

共享引用
  

思考:  
a =  "3"
  
b = a
  
a = "spam"
  
这样输出b会是多少?
  

DSC0002.jpg

DSC0003.jpg

  变量a引用了spam对象的内存空间,所有值钱对象3肯定是还有引用的,那么谁用呢就是变量b
  a = 3
  b = a
  a = a + 3
DSC0004.jpg

  L = [1,2,3]
  L2 = L
  L = 24
  此时L2依然不会变,如果写下面的语句替换L=24
  L[0] = 24
  这样就更改了L2的值,因为列表L引用的是对象、L[0]是在原处修改了引用值,L与L2是共享引用的,所以L修改了第一个对象的引用,L2也会改变
DSC0005.jpg

  更好的理解共享引用
  

    ==,is  is 是比较实现应用的指针,如果不用变量名,引用相同指针,那么返回true。
  

DSC0006.jpg

DSC0007.jpg


  第一个题:A和B最初共享与引用,但是后来B重新指向了另一个对象,所以不影响A
  第二题:A和B最初共享引用,但是列表支持在原处修改,所以赋值B[0]就是在原处修改了重新指向别的地方的指针,那么A肯定也更改了,区别就在于B[0]就是在原处修改。
  第三题,其实B=A[:]是创建了两个list,A和B,即创建了两个列表A,B,两个拥有相同值的不同列表对象,所以B[0]在原处修改,不会影响A


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-547288-1-1.html 上篇帖子: Python ping 模块 下篇帖子: 43. Python celery简介
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表