Python中元组构造的效率

2024-04-26 05:32:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我想知道tuple构造函数和list构造函数的效率。你知道吗

以下是我对list结构的理解。表达式list(range(100))可能无法立即识别Iterable有100个元素,因此它会生成一个具有一些默认初始容量的容器,并添加元素,直到它已满。当容器已满时,它会生成一个新的容器,扩展容量,复制元素并重复。直到Iterable中的所有元素都用尽为止。你知道吗

考虑表达式tuple(range(100))。我假设同样的机制在起作用,因为tuple构造函数不知道Iterable有多大。它必须创建一个具有一些备用容量的容器,填充,然后重复。你知道吗

tuple类型直接存储元素(与list相反,后者存储对包含元素的容器的引用)。tuple也没有附加新元素的空闲容量。你知道吗

由于tuple构造函数使用了一个中间容器来容纳元素,这是否意味着tuple构造函数的最后一步是将容器中的所有元素复制到一个适当的tuple类型中,而没有多余的容量?如果是这样,这将使tuple构造函数的效率低于list构造函数,因为list可能只是保留了在构造期间使用的中间容器。如果不是,这是否意味着tuple以某种方式保留了构造中使用的容器?你知道吗

我试着对它们进行基准测试,但没有得到有意义的差异。你知道吗

>>> from timeit import timeit
>>> rng = 5000
>>> num = 5000
>>> print(timeit(stmt=f'tuple(range({rng}))', number=num))
0.444614720006939
>>> print(timeit(stmt=f'list(range({rng}))', number=num))
0.4465303409961052

Tags: 元素类型表达式rangeiterablenum容器list