我在Python中使用3D對象列表來組織我擁有的數據集。我注意到我的對象元素不是很獨特,即數組中一個對象內部的變量正在更新。下面顯示了一個說明我的問題的最小工作示例。Python2.7:確保3D對象列表是唯一的
class myClass:
def __init__(self,ListA=[],ListB=[],ListCount=0):
self.ListA = ListA
self.ListB = ListB
self.ListCount = ListCount
def add_data(self,ElementA,ElementB):
self.ListA.append(ElementA)
self.ListB.append(ElementB)
self.ListCount = self.ListCount + 1
def check_data(self):
if(len(self.ListA) != self.ListCount):
print("Error: Unaccounted for Data in Object!")
print("Object has %d elements. Thinks it has %d"%(len(self.ListA),self.ListCount))
使用這個類定義的python代碼就像這樣。
import random
ObjectArray = [[[myClass() for k in range(4)] for j in range(3)] for i in range(2)]
#Print addresses of object array
print("Addresses of the individual object elements in the 3D list ")
for i in range(0,2):
for j in range(0,3):
for k in range(0,4):
print(ObjectArray[i][j][k])
#Loop over object array and fill each object with some data
for i in range(0,2):
for j in range(0,3):
for k in range(0,4):
NumData = int(10*random.random())
for m in range(0,NumData):
#Generate some junk data to insert into the list of this object
ListAData = int(10*random.random())
ListBData = int(10*random.random())
ObjectArray[i][j][k].check_data()
ObjectArray[i][j][k].add_data(ListAData,ListBData)
ObjectArray[i][j][k].check_data()
我錯過了什麼?是否有可能在Python 2.7中使用3D對象列表?打印出來時,列表中的每個對象似乎都有一個唯一的內存地址。任何有識之士將不勝感激。
從該代碼輸出的樣品是:
Addresses of the individual object elements in the 3D list
<__main__.myClass instance at 0x7fc59ad4ef80> <__main__.myClass
instance at 0x7fc59ad635a8> <__main__.myClass instance at
0x7fc59ad63248> <__main__.myClass instance at 0x7fc59ad63440>
<__main__.myClass instance at 0x7fc59ad6d320> <__main__.myClass
instance at 0x7fc59ad6d368> <__main__.myClass instance at
0x7fc59ad6d3b0> <__main__.myClass instance at 0x7fc59ad6d3f8>
<__main__.myClass instance at 0x7fc59ad6d488> <__main__.myClass
instance at 0x7fc59ad6d4d0> <__main__.myClass instance at
0x7fc59ad6d518> <__main__.myClass instance at 0x7fc59ad6d560>
<__main__.myClass instance at 0x7fc59ad6d638> <__main__.myClass
instance at 0x7fc59ad6d680> <__main__.myClass instance at
0x7fc59ad6d6c8> <__main__.myClass instance at 0x7fc59ad6d710>
<__main__.myClass instance at 0x7fc59ad6d7a0> <__main__.myClass
instance at 0x7fc59ad6d7e8> <__main__.myClass instance at
0x7fc59ad6d830> <__main__.myClass instance at 0x7fc59ad6d878>
<__main__.myClass instance at 0x7fc59ad6d908> <__main__.myClass
instance at 0x7fc59ad6d950> <__main__.myClass instance at
0x7fc59ad6d998> <__main__.myClass instance at 0x7fc59ad6d9e0>
Error: Unaccounted for Data in Object! Object has 4 elements. Thinks it has 0
Error: Unaccounted for Data in Object! Object has 5 elements. Thinks it has 1
Error: Unaccounted for Data in Object! Object has 5 elements. Thinks it has 1
Error: Unaccounted for Data in Object! Object has 6 elements. Thinks it has 2
Error: Unaccounted for Data in Object! Object has 6 elements. Thinks it has 2
Error: Unaccounted for Data in Object! Object has 7 elements. Thinks it has 3
Error: Unaccounted for Data in Object! Object has 7 elements. Thinks it has 3
他們是myClass的獨特的實例,但如果打印'打印(ID(ObjectArray [我] [j] [k] .ListA))'你應該看到他們都有相同的列表....搜索「python中的可變默認參數」 –