当我们使用列表理解时,Python会并行创建对象

在Python中编写一些简单的面向对象的东西时,我碰巧遇到了这个问题。假设我创建了一个具有增量ID(使用静态变量)的类,并初始化了该类的新对象,并期望每个新实例的ID自动增加1。

这是我定义的课程:

class Object:
   counter = 0

   def __init__(self):
      self.id = Object.counter
      Object.counter += 1

然后,我创建了一个固定长度的数组,其中包含k个Object类型的实例。我有两种方法可以做到这一点:

(1)

objects = [Object() for i in range(k)]

或(2)

objects = [Objects()] * k

(1)给我想要的结果,即每个实例都有一个增量ID。有趣的是,(2)产生的实例都具有相同的ID =0。所以我猜(2)与(1)一样,但并行吗?

此外,我主要使用Java进行OOP,这就是实现增量ID的方式。我不知道这是否也适用于Python。

很抱歉,如果我的问题很多余。我真的不知道该怎么称呼我正在做的这种事情(我想是列表理解)。

非常感谢您的答复!

djr15 回答:当我们使用列表理解时,Python会并行创建对象

1是正确的方法。它创建了k个对象。

2可能不是您想要的。它只会创建一个对象,然后创建一个列表,“将” k次指向同一对象。

使用以下命令显示1和2的结果

print(list(id(obj) for obj in objects))

很多人试图在他们的生活中第一次实现二维数组,例如2D,经常遇到这种错误(如2)。棋盘。

board = [[0] * 8] * 8  

创建一行零,被引用8次。

要输入8个不同的行

board = [([0] * 8) for row in range(8)]

print([id(row) for row in board])

将显示差异

本文链接:https://www.f2er.com/3167137.html

大家都在问