设想如果使用一个包含很多 Python
对象的
Python
数据结构,会发生什么?
Python
中的标准可变多元素容器是列表。可以用如下方式创建一
个整型值列表:
创建一
个整型值列表:
list_a = list(range(10))
print(list_a)
print(type(list_a[0]))
示例1结果:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
<class 'int'>
创建一个字符串列表:
list_b = [str(c) for c in list_a]
print(list_b)
print(type(list_b[0]))
示例2结果:
['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
<class 'str'>
因为
Python
的动态类型特性,甚至可以创建一个异构的列表:
list_c = ["3", 3.0, 3, True]
print([type(i) for i in list_c])
示例3结果:
[<class 'str'>, <class 'float'>, <class 'int'>, <class 'bool'>]
但是想拥有这种灵活性也是要付出一定代价的:为了获得这些灵活的类型,列表中的每一项必须包含各自的类型信息、引用计数和其他信息;
也就是说,每一项都是一个完整的
Python
对象。来看一个特殊的例
子,如果列表中的所有变量都是同一类型的,那么很多信息都会显得多
余
——
将数据存储在固定类型的数组中应该会更高效。
动态类型的列表和固定类型的(NumPy
式)数组间的区别如下图
所示。
