我正在用Python写一个程序。我有一个使用列表的二维矩阵实现,我在所有函数的范围之外声明了列表。其思想是将从后续函数调用中计算的值存储在矩阵中。我的代码是这样的:
database=[[0 for i in range(2)] for j in range(2)] #2-D matrix
def func(data,x,y):
#manipulate the list data and then store it in database[x][y]
data[1]+=1
database[x][y]=data
print("database[0][0]={}, database[1][1]={}".format(database[0][0], database[1][1]))
del data[:]
def main():
data=['one',1]
func(data,0,0)
data=['two',2]
func(data,1,1)
if __name__=="__main__":main()
最后,我得到数据库[0][0]作为不同的东西。我想知道为什么索引[0][0]没有[' 1 ',2]!任何帮助都会很感激。谢谢!
在func
中,当您执行del data[:]
时,您删除了本地参数data
指向的对象。因此,即使你在数据库中存储了对它的引用,它也消失了。
- 删除delete语句,本地变量将被丢弃,不需要这个
- 使用
database[x][y]=list(data)
代替将数据复制为新对象