見出しが意味をなすかどうかはわかりません...しかし、これは私がリストを使用してやろうとしていることです
>>> x = 5
>>> l = [x]
>>> l
[5]
>>> x = 6
>>> l
[5] # I want l to automatically get updated and wish to see [6]
>>>
同じことがdict、tupleでも起こります。変数の動的な値を格納できる python オブジェクトはありますか?
ありがとう、
見出しが意味をなすかどうかはわかりません...しかし、これは私がリストを使用してやろうとしていることです
>>> x = 5
>>> l = [x]
>>> l
[5]
>>> x = 6
>>> l
[5] # I want l to automatically get updated and wish to see [6]
>>>
同じことがdict、tupleでも起こります。変数の動的な値を格納できる python オブジェクトはありますか?
ありがとう、
Pythonで代入演算子がどのように機能するかにより、これを機能させる方法はありません。以前にバインドされていたものを変更せずに、x = WHATEVER
常にローカル名x
をに再バインドします。(*)WHATEVER
x
これを回避するには、整数を単一要素リストなどのコンテナデータ型に置き換えます。
>>> x = [5]
>>> l = [x]
>>> l
[[5]]
>>> x[0] = 6
>>> l
[[6]]
しかし、それは本当にハックであり、実験以外にはお勧めしません。
(*)再バインドは、参照カウントがゼロに低下したときに、以前にバインドされたオブジェクトを実際に変更する場合があります。たとえば、ファイルを閉じる場合があります。ただし、それに依存するべきではありません。
変数はデータを格納する場所です。データ構造は、データを格納する場所です。ニーズに合ったものを選んでください。
モジュールでできnumpy
ます。
>>> from numpy import array
>>> a = array(5)
>>> a
array(5)
>>> l = [a]
>>> l
[array(5)]
>>> a.itemset(6)
>>> a
array(6)
>>> l
[array(6)]
一般に、以下に示すように、0-D numpy 配列は通常の値として扱うことができます。
>>> a + 3
9
ただし、必要に応じて、基になるオブジェクトに次のようにアクセスできます。
>>> a.item()
6
これは、特定の形式ではあまり拡張性/柔軟性がありませんが、より良いものの基礎として使用できる動的アクセスの一種のハッキーな方法です。
>>> a = 7
>>> class l:
def a_get(self):
global a
return a
def a_set(self, value):
global a
a = value
a = property(a_get, a_set)
>>> c = l()
>>> c.a
7
>>> a = 4
>>> c.a
4
>>> c.a = 6
>>> a
6