python学习-可变list1

出自:https://blog.csdn.net/gavin_john/article/details/49758911

python与Java类似,有些数据类型是值传递,有些是引用传递。

比如列表list,在原处修改值

[python]  view plain  copy
  1. >>> L1 = [1,2,3]  
  2. >>> L2 = L1  
  3. >>> L2  
  4. [123]  
  5. >>> L1[0] = 9  
  6. >>> L1  
  7. [923]  
  8. >>> L2  
  9. [923]  
这个例子中,L1和L2引用了同一个对象,即指向了同一片内存区域,列表在原处可修改,所以L1的修改影响了L2的值。【共享引用,在原处修改】

[python]  view plain  copy
  1. >>> a = 1  
  2. >>> b = a  
  3. >>> a  
  4. 1  
  5. >>> b  
  6. 1  
  7. >>> a = 3  
  8. >>> a  
  9. 3  
  10. >>> b  
  11. 1  
但是整数并不能在原处修改,a重新引用了一个对象3之后,并不能影响b,所以b还是引用了1这个对象
======================================================= =====================

由于Python具有缓存机制,所以python对小的数字也采用复用,如下例子:

[python]  view plain  copy
  1. >>> a = 32  
  2. >>> b = 32  
  3. >>> a == b  
  4. True  
  5. >>> a is b  
  6. True  
is操作符,是在检查对象的同一性,如果两个变量名精确地指向了同一个对象,它会返回True。实际上,is只是比较实现引用的指针,是否指向同一个对象。
上例中,按照常规,因为我们运行了两个不同的常量表达式,a和b两个变量应该指向不同的对象,但这里a is b返回了True,说明a和b指向了同一个对象。

这就说明,在Python中,小的整数和字符串被缓存并复用了


实际上,如果你想刨根问底的话,你可以向Python查询一个对象的引用次数:在sys模块中的getrefcount函数会返回对象的引用次数。

[python]  view plain  copy
  1. >>> import sys  
  2. >>> sys.getrefcount(1)  
  3. 1130  
  4. >>> a = 1  
  5. >>> sys.getrefcount(1)  
  6. 1130  
  7. >>> b= 1  
  8. >>> sys.getrefcount(1)  
  9. 1130  
  10. >>> d= 1  
  11. >>> sys.getrefcount(1)  
  12. 1131  
  13. >>> e = 1  
  14. >>> sys.getrefcount(1)  
  15. 1132  
  16. >>> f = 1  
  17. >>> sys.getrefcount(1)  
  18. 1133  
在上例中,在IDLE GUI中查询整数对象1时,它报告这个对象有1133次重复引用(绝大部分都是IDLE系统代码所引用的)
在Python中,从技术上来讲,对象有更复杂的结构而不仅仅是有足够的空间表示它那么简单。每一个对象都有两个标准的头部信息:一个类型标识符去标识这个对象的类型,以及一个引用计数器,用来决定是不是可以回收这个对象。

【类型属于对象,而不是变量,比如a = 3,这时候a是整数类型,下一句执行a="3",a又变成了字符串类型,这是根据a变量指向的对象决定的,而不是a变量决定的】


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值