6

私はそれを見たので、これを書き留めておこうと思いました. How do I pass a variable by reference? を見ました。、しかし、この文脈でそれをどのように解釈するかはわかりません。

これら2つの配列/リストがあるとしましょう:

a = [1, 2, 3, 4]
b = [-1, a, -100, a[2], -1]

インタプリタは最初にそれらを次のように認識します。

>>> print(a)
[1, 2, 3, 4]
>>> print(b)
[-1, [1, 2, 3, 4], -100, 3, -1]

a[2]を変更して、何が起こるか見てみましょう。

>>> print(a)
[1, 2, 55, 4]
>>> print(b)
[-1, [1, 2, 55, 4], -100, 3, -1]

したがって、 list が listbの参照を持っている場合、値は更新されています - しかし、 listからの要素(への参照?) で初期化された場所はどこでも、Python は初期化時に値を展開し、要素を値(参照によるものではない)であるため、値は明らかに更新されません。 aba

b = [-1 a[2] -1]基本的に、 eg を定義してから updateを定義でき、 (この場合) の値を取得するときにa[2]の最新の値が発行されることをカウントできると便利なユース ケースを見つけました。を実行せずに Python でそれを行う方法はありますか?a[2]b[1]b = [-1 a -1]b[1][2]a[2]b[1]

4

3 に答える 3

2

a可変リストへの参照です。だから、あなたが言うとき:

a[2] = 55

リストにアイテムを設定する__setitem__リストで呼び出しています。 2 番目のインデックスに格納されていたアイテムを変更しようとはしません。その参照を新しいものに置き換えるだけです。list.__setitem__

一方、リスト内のそのインデックスに格納されているオブジェクトへの新しい参照を作成するだけのx = a[2]呼び出し。__getitem__

于 2013-05-22T15:20:09.963 に答える