1.动态类型
动态类型(Dynamic Typing)是Python的另一个重要核心概念。前面说过,Python的变量不需要声明。在赋值时,变量可以重新赋值为其他任意值。
a = 1
在Python中,整数1是一个对象。对象的名字是“a”。但更精确地说,对象名其实是指向对象的一个引用。对象是存储在内存中的实体。对象名是指向这一对象的引用(reference)。借着引用操作对象,就像是用筷子夹起热锅里的牛肉。对象是牛肉,对象名就是那双好用的筷子。
通过内置函数id()能查看到引用指向的是哪个对象。这个函数能返回对象的编号:
a = 1 print(id(1)) print(id(a)) ______________ 4300382472 4300382472 _____________ #Python中还有一个 getattribute ()特殊方法,用于查询任意属性。
可以看到,赋值之后,对象1和引用a返回的编号相同。
在Python中,赋值其实就是用对象名这个筷子去夹其他的食物。每次赋值时,我们让左侧的引用指向右侧的对象。引用能随时指向一个新的对象:
a=3 print(id(a)) a = "at" print(id(a)) _____________ 4385284424 4380401968
第一个语句中,3是储存在内存中的一个整数对象。通过赋值,引用a指向对象3。第二个语句中,内存中建立对象“at”,是一个字符串。引用a指向了“at”。通过两次的id()返回能发现,引用指向的对象发生了变化。既然变量名是个随时可以变更指向的引用,那么它的类型自然可以在程序中动态变化。因此,Python是一门动态类型的语言。
一个类可以有多个相等的对象。比如两个长字符串可以是不同的对象,但它们的值可以相等。
除了直接打印id外,还可以用is运算来判断两个引用是否指向同一个对象。但对于小的整数和短字符串来说,Python会缓存这些对象,而不是频繁地建立和销毁它们。因此,下面的两个引用指向同一个整数对象3。
a= 3 b= 3 print(a is b) ——————————————- True



