第六章 动态类型
一、没有声明语句的情况
在Python中,类型是在程序运行状态中决定的,不是由代码的声明决定。
1、变量,对象和引用
(1)变量本身没有类型,在初次赋值是创建,必须在使用前赋值
(2)变量包含了一个对象的引用,每当变量出现在表达式中的时候,引用的对象会自动代替变量
2、对象有类型,变量没有
3、对象的垃圾自动回收机制:当一个对象在程序的剩余部分不被使用时,该对象将会自动被回收删除
二、共享引用
1、共享引用:在Python中,变量总是指向对象的指针,而不是可变存储区域的标签。给对象赋一个新的值,实际上是改变了变量的指针指向一个全新的对象。
2、共享引用和位置变换
>>> L1 = [2, 3, 4] # 一个可变的对象
>>> L2 = L1 # 指向同一个对象
>>> L1[0] = 24 # 位置变换
>>> L1 # L1变了
[24, 3, 4]
>>> L2 # L2也变了![24, 3, 4]
位置变换L1[0] = 24实际上改变了列表对象,而L1和L2的指向并没有改变,因此,L2也变了。
3、共享引用与相等性: == 判断两个变量的值是否相等, is 判断两个变量的引用是否相同
>>> L = [1, 2, 3]
>>> M = L # M和L指向同一个对象
>>> L == M # 有相同的值
True
>>> L is M # 指向的是同一个对象
True
>>> L = [1, 2, 3]
>>> M = [1, 2, 3] # M和L指向不同的变量
>>> L == M # 值相等
True
>>> L is M # 但是它们是不同的变量False
三、动态类型到处都是
1、因为Python中到处都是赋值和引用,所以对动态类型的一点基本掌握在很多情况下都是有益的。
2、在实践层面,动态类型意味着可以少写一些代码。