python是动态语言。不需要事先声明变量类型,同一变量可以被赋值为不同的对象类型。
变量、对象、引用
- 变量创建
python的变量不需要声明,当代码第一次给其赋值时就创建它。
- 变量赋值
举例说明,赋值语句 “a = 3”。一般而言赋值过程如下:
- 创建被赋值的对象,即在内存中开辟一块空间,用于保存对象的信息。本例来说是一个整数对象3.
- 如果变量名之前没有被定义过,创建变量名,’a’。如果变量名存在,则跳过。
- 建立变量名和被赋值对象之间的引用。引用类似于c语言的指针。
以上过程适用于所有的变量赋值。
- 变量类型
变量本身不包含任何类型约束信息,类型的概念存在于它引用的对象中而不是变量名中。
- 变量使用
当变量出现在表达式中时,它会马上被引用的对象所代替。所有的变量在使用前必须被赋值,使用未赋值的变量会引起“NameError”异常(变量必须先被创建才能使用)
- 对象
每个对象有两个标准的头部信息:标识对象类型的类型标志符,一个引用计数器。一个对象可能同时被多个变量名引用,引用计数器记录了对象被引用的次数。对于大部分的对象而言,当引用计数器的值为0时,对象所在的内存空间会被回收。
- 共享引用
多个变量名同时引用同一个对象。
python的内置核心对象类型
不可变类型
不可变类型,对象一旦创建不可修改。整数类型 int 、浮点数类型 float、复数类型 complex、字符串类型 str、元祖类型 tuple 、集合类型 set,都属于不可变类型。下面通过变量赋值的过程理解型不可变对象:
a = 1 #建立变量a到对象1的引用 b = a #建立变量b到对象1的引用, 共享引用 a = 2 #因为int类型的对象1不可修改,所以新建对象2,并且建立变量a到它的引用 #现在变量a、b分别引用不同的对象。
过程如图:
可变类型
可变类型指对象可原地修改的类型。比较典型的:列表类型 list、字典类型 dict。
以list为例,list是任意对象的有序集合,如下图所示:
list对象中每个元素都是一个对象引用。通俗理解,list对象的元素有点类似变量,同样可更改。
时间: 2024-10-18 10:13:15