3

リストを渡すと、Python関数の奇妙な動作を理解するのに問題があります。次の関数を作成しました。

def func(x):
    y = [4, 5, 6]
    x = y

def funcsecond(x):
    y = [4, 5, 6]
    x[1] = y[1]

x = [1, 2, 3]

func(x)を呼び出してxを出力すると、[1、2、3]が出力されます。これは、xが以前と同じように、リストyをxに割り当てません。ただし、funcsecond(x)を呼び出すと、xの2番目の位置に5が割り当てられます。どうしてこんなことに?リスト全体を割り当てると何も起こりませんが、要素を1つだけ割り当てると、最初に呼び出したリストが変更されます。どうもありがとうございました。私が何を言おうとしているのか理解していただければ幸いです。英語で自分を表現するのに苦労しています。

4

2 に答える 2

9

前者は名前を再バインドし、後者はオブジェクトを変更します。名前の変更はローカルスコープにのみ存在しますが、変更されたオブジェクトはスコープが終了した後も変更されたままになります。

于 2012-06-21T11:03:34.557 に答える
4

this is happening beacuse x points to a object which is mutable.

def func(x): # here x is a local variable which refers to the object[1,2,3]
    y = [4, 5, 6]
    x = y  #now the local variable x refers to the object [4,5,6]

def funcsecond(x): # here x is a local variable which refers to the object[1,2,3]
    y = [4, 5, 6]
    x[1] = y[1]  # it means [1,2,3][1]=5 , means you changed the object x was pointing to

x = [1, 2, 3]
于 2012-06-21T11:06:40.690 に答える