Python动态类型

120 阅读1分钟

动态类型

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中两种不同的相等含义:

  1. 内容相等
  2. 内存相等

== 运算符

==运算符用于判断内容是否相等,并不关心是否真的是同一个内存地址。

is 运算符

is运算符用于判断内存是否相等,内存都一样了,内容更不必说是想等的了。