3

リストを別のリストに割り当てて、一方のアイテムを変更すると、両方の変更が反映されますが、一方のリスト全体を変更しても、両方の変更が反映されない理由はありますか?

a=5
b=a
a=3
print b #this prints 5

spy = [0,0,7]
agent = spy
spy[2]=8
print agent #this prints [0,0,8]

spy = [0,0,7]
agent = spy
spy = "hello"
print agent #this prints [0,0,7]
4

3 に答える 3

7

最初にオブジェクトを変更し、2番目名前を再バインドします

list含むspy[2]=8

(「スパイ」と呼ばれる名前)= "hello"

于 2012-04-21T21:16:17.943 に答える
2

Pythonでの参照は、ポインター、アドレス、値の受け渡し、参照の受け渡しについて知っていることをすべて忘れて、ラベルとオブジェクト、または名前とオブジェクトと同じように考えると、はるかに理解しやすくなります。

これに従ってください:

a=5
b=a
a=3
print b #this prints 5

ラベル「a」を5に付け、次に「b」を同じオブジェクトに付けます。「a」は5になります。したがって、「a」は削除されて3になります。「b」はまだ5にあり、「a」を移動します。他の何かに影響を与えることはありません。

spy = [0,0,7]

あなたは「スパイ」という名前をリストに載せています[0、0、7]

agent = spy

同じリストに「エージェント」という名前があります[0、0、7]

spy[2]=8
print agent #this prints [0,0,8]

リストのインデックス2ラベルを8に配置します。エージェントとスパイはどちらも同じリストの名前であるため、印刷すると両方に変化が見られます。

spy = [0,0,7]

リストに「スパイ」という名前があります[0、0、7]

agent = spy

同じリストに「エージェント」という名前があります[0、0、7]

spy = "hello"

これで、リストから「spy」という名前が削除され、文字列「hello」が追加されました。リストにはまだ「エージェント」というラベルが割り当てられています。

print agent #this prints [0,0,7]

とった?

于 2012-04-21T21:30:42.360 に答える
1

ある変数から別の変数にリストを割り当てると、両方が同じリストに属します。

spy = [0,0,7]
agent = spy
spy[2]=8

そのため、スパイを変更すると、エージェントも変更されます。これは、両方が同じメモリ位置の同じリストに属しているためです。あなたはそれをチェックすることができます

id(spy)
id(agent)

それは参照による呼び出しです。

ただし、エージェントの初期化後に新しいリストをspyに割り当てると、spyは別のメモリ位置にある別のリストに属します。

id(spy)
id(agent)

これは、メモリ内の変数の参照IDを提供するid()関数を使用して確認することもできます。

于 2012-10-01T11:21:34.257 に答える