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
Что происходит?
Ответы
Ответ 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
того же типа, но с измененными значениями.