动态类型
Python中不需要定义数据类型即可创建变量,就是动态类型。 实际上变量名是一个void指针(C语言),可以指向任意类型的内存地址。真正的数据类型存储在指针指向的内存的头部。修改变量,实际上只是修改了指针的指向。
引用
由上述动态类型的特点,可以引申出引用。而引用包含两个知识点:共享引用和相等。
共享引用
共享引用是变量指针指向同一个内存地址。
L1 = 123
L2 = L1
实际上,L1与L2指向的内存地址相同,指针相同。
如果不希望修改L1的时候影响L2,就应该调用L1的copy()方法,或者使用copy.copy()函数:
L2 = L1.copy()
# 或者
import copy
L2 = copy.copy(L1)
这样,Python就会在内存中开辟一块新的内存,存储的内容与L1指向的内存完全一致,然后再用L2指向该内存地址。
值得注意的是, 如果被拷贝的内容是嵌套的,则需要使用deepcopy()方法或者copy.deepcopy()函数。
相等
由上述动态类型和共享引用,引出在python中两种不同的相等含义:
- 内容相等
- 内存相等
== 运算符
==运算符用于判断内容是否相等,并不关心是否真的是同一个内存地址。
is 运算符
is运算符用于判断内存是否相等,内存都一样了,内容更不必说是想等的了。