2015-11-22 26 views
0

我做測試蟒蛇就像低於2.7的代碼共享。我不明白爲什麼在對象列表與其他物體

class test(object): 
    #initial 5*5 array with 1 
    value = [[1 for col in range(5)] for row in range(5)] 

    def __init__(self, name) : 
     self.name = name 

test_list = [test("TEST"), test("test")] 
test_list[0].value[0][0] = 0 

print test_list[0].value[0][0] 
print test_list[1].value[0][0] 

我想到的是導致這樣的

但實際的結果是一樣

所以它看起來就像物體「TEST」和「測試」共享列表。

如果我如下更改代碼,那麼這個問題就不會出現。

class test(object): 
    def __init__(self, name) : 
     self.value = [[1 for col in range(5)] for row in range(5)] 
     self.name = name 

test_list = [test("TEST"), test("test")] 
test_list[0].value[0][0] = 0 

print test_list[0].value[0][0] 
print test_list[1].value[0][0] 

我想知道爲什麼這兩個代碼工作不同。

回答

0

在第一個例子,你做value一類變量,因此它屬於實際的類和類的所有實例之間共享。在第二示例中,value屬於類的實例,並且value一個單獨副本爲每個實例製備。

+0

類試驗(對象): 值= 0 DEF __init __(個體,名稱): self.name =名 test_list = [試驗( 「TEST」),測試( 「測試」)] test_list [0] .value = 1 print test_list [0] .value print test_list [1] .value 如果我製作這段代碼,那麼它就可以找到。單個變量不會發生這個問題,但是會出現列表或字典。 – booksky

相關問題