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)
ドキュメントに示されているように。
Windows 7でPython 2.6を使用しています。
どうしたの?
はい、あります。ドキュメントどおりに機能します。
._replace
returns新しい名前付きタプル。オリジナルは変更されないため、次のように記述する必要があります。
p = p._replace(x=33)
詳細は somenamedtuple._replace(kwargs) を参照してください。
タプルは不変です。 _replace()
は、変更を加えた新しいタプルを返します。
p = p._replace(x=33)
namedtuple._replace()
は新しいタプルを返します。オリジナルは変更されていません。
それは、その先祖タプルのように、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
を返します。