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 对象都有一个新的内存位置或新的指针位置。
在 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 对象都有一个新的内存位置或新的指针位置。