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

2024-04-25 07:54:15 发布

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

例如,我想要一个如下所示的列表:[1, 1, 1, 1, 1]。你知道吗

我可以创建它:

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

或者我可以将一个单独包含元素的列表乘以5次:

l = [1] * 5

或者我可以用一个列表:

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

在这三种方法中,哪一种是最快和最佳的做法?你知道吗

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


Tags: 方法in元素列表for情况range内存地址
1条回答
网友
1楼 · 发布于 2024-04-25 07:54:15

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

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>

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

相关问题 更多 >