曾经很是好奇,python的变量怎么这么灵活,既不用声明其类型又可以各种随便赋值,后来深入学习就感觉着实有趣。Python中数字字符串等等都是对象,1是对象,“Hello”也是对象,每个对象都知道自己的类型,每个对象都有一个引用计数器,这个引用计数器是干嘛的呢,加入把对象“hello”赋值给变量a,即:a=”hello” 这样a就是对象“hello”的一个引用,再把a赋值给b,即b=a,那么 a和b就指向同一个对象“hello”
此时hello的引用计数器的值就是2了,python有垃圾回收机制,当引用计数器为0时,对象所占用的内存就会自动释放。当然并不是所有对象都是这样,python有个缓存机制,python会缓存并复用小的整数和小的字符串,例如
>>>a=24
>>>a=”Hello world”
当我们给a从新赋值后,对象24并不会像我们所说的那样被回收,它将可能仍被保存在一个系统表中等待下一次引用,再举一个例子:
>>>a=45
>>>b=45
>>>a is b
True
此时a,b指向的是同一个对象.
>>>a=[‘a’,’b’]
>>>b=[‘a’,’b’]
>>>a is b
false
此时,a,b指向的是不同对象
我们可以使用”is操作符“来进行验证,is操作符是用来检查对象的同一性,如果两个变量名精确的指向同一个对象,就返回True 即a is b
我们也可以向python查询引用次数
>>>import sys
>>>sys.getrefcount(1)
828
输出828次引用,绝大多数是idle系统代码所使用。
原文地址:http://xiaofengfeng.blog.51cto.com/8193303/1760675