Подтвердить что ты не робот

Python: namedtuple._replace() не работает так, как описано в документации

У меня возникли проблемы с реализацией namedtuple._replace(), поэтому я скопировал код сразу после документации:

Point = namedtuple('Point', 'x,y')

p = Point(x=11, y=22)

p._replace(x=33)

print p

и я получил:

Point(x=11, y=22)

вместо:

Point(x=33, y=22)

как показано в документе.

Я использую Python 2.6 на Windows 7

Что происходит?

4b9b3361

Ответ 1

Да, он работает точно так же, как задокументировано.

._replace возвращает новый namedtuple, он не изменяет оригинал, поэтому вам нужно написать это:

p = p._replace(x=33)

Смотрите здесь: somenamedtuple._replace (kwargs) для получения дополнительной информации.

Ответ 2

Кортеж неизменен. _replace() возвращает новый кортеж с вашими изменениями:

p = p._replace(x=33)

Ответ 3

namedtuple._replace() возвращает новый кортеж; оригинал не изменяется.

Ответ 4

Мне кажется, что namedtuple неизменен, как и его предшественник, кортеж.

>>> from collections import namedtuple
>>> Point = namedtuple('Point', 'x,y')
>>>
>>> p = Point(x=11, y=22)
>>>
>>> p._replace(x=33)
Point(x=33, y=22)
>>> print(p)
Point(x=11, y=22)
>>> p = p._replace(x=33)
>>> print(p)
Point(x=33, y=22)

NamedTuple._replace возвращает новый NamedTuple того же типа, но с измененными значениями.