Python动态类型

简介

python中的变量类型,不像c语言那样需要事先声明,变量的类型是在运行过程中自动决定的,这就是python的动态类型机制。

在python中,如a=3这样一个语句,事实上运行了三个步骤:

  1. 创建一个代表3的对象
  2. 如果a不存在,就创建a
  3. 将代表3的变量引用至变量a

这就是python动态类型的秘密。类型其实是对象的类型,变量只是对特定对象的引用。

 

如果说
a = 3
b = a
a = 1
那么b等于多少呢?


这是因为进行a=1这步时,并不是修改了对象3的值为1,而是将a重新引用至一个新的对象1。而b依然是对象3的引用,所以b的值并不会改变。

多个变量对同一个对象引用,称为共享引用。对共享引用的对象修改可得加倍小心,因为一道修改,所有对其引用的变量值都会改变。如下图,L1和L2都是同一个对象的引用,当修改了对象后,两个值都发生了改变。

 

相关方法

防止共享引用

如果不希望共享引用,可以使用copy方法

import copy
L2 = copy.copy(L1)
或者
L2 = copy.deepcopy(L1)         #对嵌套对象也进行拷贝

另外,对于列表,还可以使用分片技术
L2 = L1[:]

 

判断是否相等

通过==只是简单的判断两个变量的值是否相等,不能判断是否引用了同一个对象。要判断是否引用了同一个对象,用is。

通常情况下,不被引用的对象会被系统回收。但是对于小的整数和字符串,python会启用一种缓存机制,不会回收该对象,并且让所有创建的变量都引用同一个对象。

最后,可以通过getrefcount()方法来查看对象被引用的次数。

Add a Comment

电子邮件地址不会被公开。 必填项已用*标注