这就是说a本身并无类型,类型是由a所指向的对象决定的。 若a=3,然后又a=’dd’,则在定义a=’dd’时,会再次创建一个’dd’的对象,并将a指向该对象。而先前的对象3会发生什么情况呢?这里与之前关注过的python的引用计数会发生奇妙的联系。在对象中,保持有一个引用计数器,当a=’dd’时,原对象3的引用计数会减1,在没有其它变量引用此对象3的情况下,3的引用计数减为0,则系统自动释放对象3所占用的空间。这是Python所用的垃圾收集机制。
那么如下的例子:
a=3 b=a
则会形成a和b同时指向对象3的情形,则此时3对象的引用计数应为2,这样,若再执行:
a=3+1
则会新创建对象4,注意在Python中,整数对象实际上是不可变的。这一点与其它语言有相当大的差别。 a指向对象4,而原来的3对象引用计数减1但并不为0,因此变量b指向对象3仍然有效。所以虽然Python的变量是引用值,但却不会造成a值修改而b值跟着改变的情况。
原创文章,作者:苏葳,如需转载,请注明出处:https://www.swmemo.com/423.html