创建1个元素类型列表的最佳实践方法是什么

时间:2019-07-10 12:29:25

标签: python

例如,我想要一个看起来像这样的列表:[1, 1, 1, 1, 1]

我可以创建它:

l = [1, 1, 1, 1, 1]

或者我可以将一个仅包含元素的单个列表重复5次:

l = [1] * 5

或者我可以使用列表理解:

l = [1 for i in range(5)]

在这三种方式中,哪种是最快的最佳实践?

我以某种方式还记得第二种方法是有问题的,因为列表中的每个位置将包含相同的内存地址,因此更新一个索引将导致列表中的所有元素都更新为相同的值。但是,经过修改后,情况似乎并非如此。

1 个答案:

答案 0 :(得分:0)

可变对象的两种更好的情况:

import copy

class A:
   def __init__(self, value):
      self.value = value

_LEN_OF_LIST = 5

# object could be created quickly
l = [A(value=100500) for i in range(_LEN_OF_LIST)]

# creating of object is expensive operation
default_object = A(value=100500)    # mutable object which
l = [copy.deepcopy(default_object) for i in range(_LEN_OF_LIST)]

# addresses
print('\r\n'.join([str(obj) for obj in l]))

输出:

<__main__.A object at 0x0000028A9BD45B00>
<__main__.A object at 0x0000028A9BC17EB8>
<__main__.A object at 0x0000028A9BC17AC8>
<__main__.A object at 0x0000028A9BC17B38>
<__main__.A object at 0x0000028A9BC17DA0>

如您所见:每个对象在内存中都有自己的地址