2013-12-14 8 views
5

私はいくつかの質問を約TypeError: 'tuple' object does not support item assignment SO上を尋ねたが、それでも、私はこのことについて困惑している:python tuple、誰かがこの動作を説明できますか?

は、コードスニペットを考えてみましょう:

>>> a = ([],[]) 
>>> a[0].append(1)  # 1 
>>> a 
([1], []) 
>>> a[0] += [2] 

Traceback (most recent call last): 
    File "<pyshell#5>", line 1, in <module> 
    a[0] += [2] 
TypeError: 'tuple' object does not support item assignment # 2 
>>> a 
([1, 2], []) # 3 
>>> 

私の質問は以下のとおりです。

  1. タプルていますなぜなら、私はPython不変性を本当に理解していません。)
  2. 1が受け入れられている場合は、1はその値を正常に変更しました。 d、理由は何ですか2TypeErrorを上げますか?
  3. 3ではaが変更されていますが、TypeErrorが発生するのは何ですか?

タプルは不変ですが、それは要素として、可変データ型(ウル場合リスト)を含めることができるためですあなた

+0

最初はhttp://docs.python.org/3/reference/datamodel.html#objects-values-and-typesを参照してください。基本的に「タプルは不変です」とは、「追加することはできません。またはタプル内のオブジェクトを置き換える "、"タプルに含まれるオブジェクトは不変ではありません "。 – delnan

答えて

0

ありがとうございます。

あなたのタプルa = ([], [])はタプルのリストです。そのため、あなたは[0]にデータを追加することができました。これはリストです。この中

a[0] += 2 

あなたは3で

(原因「=」代入演算子の使用に)例外TypeError例外を発生させタプルの値を変更しようとしていた、リスト'+'演算子の使用により連結されました。

+0

-1あなたの答えは 'a [0] + = 2'がタプルを修正しようとする方法には言及していません。なぜなら、純粋にリストオブジェクトを変更するだけだからです。 'a [0]'は 'a'とは異なります。 –

+0

a [0] = a [0] + [2]ここで右側はエラーなしで完結し(連結が発生しました)、結果を[0]に代入しようとすると実際に値をタプル、それはエラーを投げます。私は間違っているかもしれません。しかし、これは私が理解したものです。 – Praveen

関連する問題