4

リストをコピーしますよね?しかし、コードでは、x = x[:]私が理解していないものを見ています。どうすれば両方のコピーを同じものと呼ぶことができますか?

4

2 に答える 2

6

権利が最初に評価され、一時変数に配置され、xが一時変数に再割り当てされます。もちろん、あなたはそれを見ることはありません。

于 2012-04-22T23:51:06.883 に答える
2

あなたの質問に答えるために「[:]はPythonでどのように機能しますか?」この特定の表現自体のコンテキストでは少し注意が必要です

x = x[:]

それは本当に言っているようなものなので、それは起こりそうにありませんa = a

あなたは次のようなものを見る可能性が高いです

a = x[:]

これは簡単に言えば、によって参照されるリストのコピーを作成し、xそれをに割り当てaます。

あなたが単にやったなら

a = x

両方の変数は同じ場所を参照し、いずれかの変数への変更は両方に反映されます。

コロン表記を使用しない場合は、次のようになります。例a = x

In [31]: x = range(5)
In [32]: a = x

In [33]: a
Out[33]: [0, 1, 2, 3, 4]

In [34]: x
Out[34]: [0, 1, 2, 3, 4]

In [35]: a[3] = 99    # I am making a change in a

In [36]: a
Out[36]: [0, 1, 2, 99, 4]

In [37]: x
Out[37]: [0, 1, 2, 99, 4]   # but x changes too!

これをと比較してくださいa = x[:]

In [38]: x = range(5)
In [39]: a = x[:]

In [40]: a
Out[40]: [0, 1, 2, 3, 4]

In [41]: x
Out[41]: [0, 1, 2, 3, 4]

In [42]: a[3] = -99    

In [43]: a
Out[43]: [0, 1, 2, -99, 4]  # a changes

In [44]: x
Out[44]: [0, 1, 2, 3, 4]    # x does not change

注:@gnibblerは、遭遇する可能性のある短く完全な例(以下のコメント)を提供しx = x[:]、そのコンテキストでは、割り当てが有用な目的に役立ちます(ただし、最初にこれに遭遇したコンテキストはわかりません)。

于 2012-04-22T23:54:05.450 に答える