2010-07-06 51 views
1

考慮一下:如何做兩個目錄項始終指向同一個浮動值

>>> foo = {} 
>>> foo[1] = 1.0 
>>> foo[2] = foo[1] 
>>> foo 
{1: 0.0, 2: 0.0} 
>>> foo[1] += 1.0 
{1: 1.0, 2: 0.0} 

這是什麼情況。不過,我想會是最後一行寫着:

{1: 1.0, 2: 1.0} 

含義既指的是相同的值,即使該值的變化。我知道上面的工作方式,因爲數字在Python中是不可變的。有沒有比創建自定義類來存儲值更簡單的方法?

回答

1

它只可能與可變對象,所以你必須包裝你的不可變值與一些可變對象。實際上,任何可變對象都可以,例如內置列表:

>>> n = [0] 
>>> d = { 1 : n, 2 : n } 
>>> d 
{1: [0], 2: [0]} 
>>> d[1][0] = 3 
>>> d 
{1: [3], 2: [3]} 

但是創建自己的類或對象時有什麼困難?

>>> n = type("number", (object,), { "val" : 0, "__repr__" : lambda self: str(self.val) })() 
>>> d = { 1 : n, 2 : n } 
>>> d 
{1: 0, 2: 0} 
>>> d[1].val = 9 
>>> d 
{1: 9, 2: 9} 

作品一樣精緻;)

1

在python中有一種指針的更簡單的方法是將你的值包裝在一個列表中。

>>> foo = {} 
>>> foo[1] = [1.0] 
>>> foo[2] = foo[1] 

>>> foo 
{1: [1.0], 2: [1.0]} 

>>> foo[1][0]+=100 # note the [0] to write in the list 

>>> foo 
{1: [101.0], 2: [101.0]} 

工程!

相關問題