Пожалуйста, примите во внимание этот код:
>>> point = namedtuple('point', ('x', 'y'))
>>> p1 = point(3,4)
point(x=3, y=4)
>>> id(p1)
2881782633456 # address in memory
>>> p1._replace(x = 78)
point(x=78, y=4)
>>> id(p1)
2881782633456 # same as before.
Похоже, что я мутировал namedtuple
на месте, то есть это изменчивый объект. Но везде говорится, что tuple
s и namedtuple
s являются неизменными объектами. Я сбит с толку.
Кроме того, если это неизменный объект, почему у него есть метод _replace
?