2015-11-29 3 views
6

私の講師はPythonに関するいくつかの質問を設定しましたが、これは私を混乱させてしまいました。なぜPythonは出力を伸ばします[[...]]

x = [[]] 
x[0].extend(x) 

Pythonが私に語った、xは[[...]]であること、これを実行した後、...は何を意味するのでしょうか?

y場合は、次の結果がちょうど[[]]

y = [] # equivalent to x[0] 
x = [[]] 
y.extend(x) 

あるとき、私はさらに混乱がxは単に[[[]]]されることに[[]]を計算すべきではないことが計算されますか?

拡張とは何ですか? ...の意味は何ですか?

+0

'x'はそれ自身を参照するため、' str(x) 'は無限ループです。 Pythonがそれをキャッチすることは素晴らしいことです。 – tdelaney

答えて

6

...は、リストに再帰的ループが含まれていることを示します。つまり、あるレベルでは何かが含まれています。これは、xxに拡張したためです。したがって、xを本質的に内部に配置しています。

yは別個のオブジェクトであるため、2番目の例では...はありません。両方が空のリストであるという点でと等しいからx[0]が発生しますが、それらは同じ空のリストではありません。

+0

したがって、 'x [0]'を 'x [0]'に拡張すると、 'x 'に含まれるデータを' x [0] 'にコピーするのではなく、' x [0] 'に'それは正しい? – CGA1123

+1

@ CGA1123:基本的にはい。 (具体的には、 'x [0]'のリストの中に 'x [0]'への参照を作成しています。 'extend'は引数自体ではなく引数の内容を追加するからです。データをコピーせずに同じオブジェクトへの参照を作成し、それがキーです) – BrenBarn

+0

ああ、ありがとう! – CGA1123

関連する問題