私が定義する場合
foo = [[1,2],[2,3],[3,4]]
bar = foo
foo と bar は同じオブジェクト、つまり [[1,2],[2,3],[3,4]] を参照します。これらの「タグ/名前空間/参照」のいずれかを使用して、オブジェクト [[1,2]、[2,3]、[3,4]] を変更できるようになりましたが、これはどのように役立ちますか?
私が定義する場合
foo = [[1,2],[2,3],[3,4]]
bar = foo
foo と bar は同じオブジェクト、つまり [[1,2],[2,3],[3,4]] を参照します。これらの「タグ/名前空間/参照」のいずれかを使用して、オブジェクト [[1,2]、[2,3]、[3,4]] を変更できるようになりましたが、これはどのように役立ちますか?
名前を既存の値に再バインドすると便利な理由の 1 つは、元の名前を別のオブジェクトに再利用する場合です。たとえばn
、フィボナッチ数列の th 番号を計算するこの関数は、 names を再利用a
し、ループ内b
でtemp
繰り返し、a
toによってb
(temp を介して) 以前に参照された値を毎回バインドします。
def fib(n):
a = 1
b = 0
for _ in range(n):
temp = a
a = a+b
b = temp
# A more Pythonic version of the last three lines would be: a, b = a+b, a
return b
クラス インスタンスの属性 があり、クラスfrobnoz
のインスタンスへの参照があり、このFrobnoz
クラスのインスタンスは、関連するすべての marfoo のリストである属性marfoos
であり、最初のものに対していくつかの操作を実行したいとします。
marfoo = self.frobnoz.marfoos[0]
marfoo.rotate(CLOCKWISE, degrees=90)
if marfoo.is_cloudy():
self.purge_clouds(marfoo)
アクションを実行したい marfoo への追加の参照を作成できなかった場合、それへの長い参照が必要になるだけでなく、参照と最初の要素の両方を検索する費用が発生しfrobnoz
ますmarfoos
。使いたいたびにリストの。
これは、値を変更する関数呼び出しに (とりわけ) 役立ちます。
def changeFoo(bar):
bar[0][0]=3.14
changeFoo(foo)
注: これは技術的に代入を使用しませんが、同等です。
複数のオブジェクトが同じオブジェクトへの参照を持つ必要がある場合にも使用できます (リンクされたリストなど)。