-
首先,理解Python中的数据类型。
Python整数不仅仅是一个整数,因为标准的Python实现是用C编写的。
这意味着每个Python对象都只是一个巧妙伪装的C结构,它不仅包含它的值,还包含其他信息。
例如,当我们在Python中定义一个整数时,比如“x=10000”,“x”不只是一个“原始”整数。 它实际上是一个指向复合C结构的指针,它包含几个值。
区别:一个C整数本质上是一个在内存中位置的标签,它是字节编码的一个整数值。Python整数是指向包含所有Python对象信息的内存位置的指针,包括包含整数值的字节。然而,在Python类型中,所有这些附加信息都是以成本为代价的,在组合了许多这些对象的结构 中,这一点变得尤为明显。 -
Python中的列表不仅仅是一个列表
l1 = list(range(10)) # 创建一个整形列表
print(l1) # 输出[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(type(l1[0])) # 输出<class 'int'>
l2 = [str(c) for c in l1] # 创建一个字符串列表
print(l2) # 输出['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
print(type(l2[0])) # 输出<class 'str'>
l3 = [True, '2', 9.9, 10]
for item in l3:
print(type(item)) # 输出<class 'bool'> <class 'str'> <class 'float'> <class 'int'>
在所有变量都是相同类型的情况下,大部分信息冗余。所以在固定类型的数组中存储数据会更有效。
在实现级别,数组本质上包含一个指向连续数据块的指针。另一方面,Python列表包含指向一个指针块的指针,每个指针都指向一个完整的Python对象,就像前面看到的Python整数。
固定类型的numpy样式的数组缺少这种灵活性,但是对于存储和操作数据来说更有效。