python 中对象的名称相同

Same name for objects in python

在 python (anjella yu) 的 100 天代码中,老师将具有相同名称的对象附加到列表中,我无法弄清楚如何创建相同名称的对象。 有人可以解释一下吗?

my_list = []
for _ in range(10):
    new_object = turtle()
    my_list.append(new_object)

如您所见,创建了 10 个同名对象并将其附加到 my_list

new_object 只是 引用 turtle 实例的一个名称。 my_list.append(new_object) 将对同一对象的 另一个 引用添加到列表中;当名称 new_object 指向不同的对象时,该引用不会改变。

换句话说,您并不是将 name new_object 添加到列表中,而是对名称所指对象的引用。 (您也可以编写 my_list.append(turtle()) 而根本不定义变量 new_object;结果是一样的。)

循环完成后,您将获得一个包含对 10 个不同对象的引用的列表,并且名称 new_object 仍然引用最后创建的对象。

列表只是对象的集合。您可以引用每个的唯一方法是通过其数字索引(例如 my_list[0]、my_list[1] 等)。因此,他们没有“名字”。所以,假设 turtle() returns 一个对象,新对象只是被添加到 my_list.

中的下一个位置

这与集合和字典不同。在一个集合中,一个对象只能存在一次。所以,如果你发送同一个对象两次,它只会在集合中结束一次。

字典也一样。字典中的“键”是它所代表的对象的一种名称。如果您提供两个具有相同键的对象,您提供的第二个将覆盖第一个。

我在这里稍微修改了你的代码,但本质是一样的。

>>> my_list = []
>>> for _ in range(10):
...     new_object = dict()
...     my_list.append(new_object)
...
>>> my_list
[{}, {}, {}, {}, {}, {}, {}, {}, {}, {}]
>>> my_list[0]
{}
>>> my_list[1]
{}
>>> id(my_list[0])
140200988731072
>>> id(my_list[1])
140200988731136
>>> id(my_list[3])
140200988731264
>>> id(my_list[4])
140200988731328
>>> id(my_list[2])
140200988731200
>>>

如您所见,my_list的第一个、第二个或第三个对象是可见的,其中none个对象有任何内容,但它们不同。

在Python中id(内置函数)用于识别赋予python内存中每个对象的唯一哈希码。所以当我检查它们时,每个对象都有一个唯一的 ID。

正如您现在所了解的,每个对象 Python 都是通过其唯一 ID 而非其可见名称来标识的。 Python 列表也使用指针(内部)来保存它的对象。所以每个 unique/new 对象都有一个新的内存位置或新的指针位置。