我想知道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
目前没有回答
相关问题 更多 >
编程相关推荐