3

この機能があるとします

>>>a=3
>>>def num(a):
       a=5
       return a
>>>num(a)
5
>>>a
3

a の値は変わりません。

このコードを考えてみましょう:

>>> index = [1]
>>> def change(a):
       a.append(2)
       return a
>>> change(index)
>>> index
>>> [1,2] 

このコードでは、index の値が変更されます。これら2つのコードで何が起こっているのか誰か説明してください。最初のコードによると、index の値は変更されるべきではありません (つまり、index=[1] のままである必要があります)。

4

4 に答える 4

7

Python の名前がどのように機能するかを理解する必要があります。こちらに適切な説明があり、ここをクリックしてケースのアニメーションをご覧いただけます。

関数内で別のリストを実際に操作したい場合は、新しいリストを作成する必要があります。

a = a[:]

何よりも先に。これは新しいリストを作成するだけですが、要素は同じままであることに注意してください。

于 2013-08-24T15:58:45.293 に答える
1

の値は変わりindex ませんindex以前と同じオブジェクトをまだ指しています。ただし、オブジェクトindexが指す状態は変更されています。それが可変状態の仕組みです。

于 2013-08-24T15:28:25.497 に答える
1

コードの最初のブロックの 3 行目は代入で、2 番目のブロックはMutationです。そのため、その動作を観察しています。

于 2013-08-24T15:41:08.440 に答える
0

発生している問題は次のとおりです。

a = 3
def num(a):
    # `a` is a reference to the argument passed, here 3.
    a = 5
    # Changed the reference to point at 5, and return the reference.
    return a

num(a)

a関数内のは、グローバルnumに定義されたものとは異なるオブジェクトです。リストのポイントが渡され、参照変数自体ではなく、変数によって参照されるオブジェクトを変更するaため、リストの場合に機能します。a

于 2013-08-24T15:34:44.210 に答える