函数修改列表不返回它

问题描述:

我试图做一个函数来刷新游戏板不要修改它。我的问题是,该功能正在修改它,我不知道为什么。函数修改列表不返回它

例如:

def refrescartablero(tablero): 
limpiarconsola() 
copiatablero=[] 
columnas=[" "] 
print (copiatablero) 
for x in tablero: 
    copiatablero.append(x) 
for x in range(1,len(copiatablero[0])+1): 
    columnas.append(str(x))   
copiatablero.insert(0,columnas)  
for x in copiatablero: 
    x.insert(0,"") 
    x.insert(len(x), "") 
for x in range(1,len(copiatablero)): 
    copiatablero[x].insert(1,str(x)) 
for x in copiatablero: 
    print ("_|_".join(x)) 
tablero=copiatablero 
return 

这个功能增加了一些,使董事会的样子:

_|_ _|_1_|_2_|_3_|_4_|_5_|_ 
_|_1_|_ _|_ _|_ _|_ _|_ _|_ 
_|_2_|_ _|_ _|_ _|_ _|_ _|_ 
_|_3_|_ _|_ _|_ _|_ _|_ _|_ 
_|_4_|_ _|_ _|_ _|_ _|_ _|_ 

但我只需要打印出来。问题是,列表中的“tablero”是:

tablero=[[' ', ' ', ' ', ' ', ' '], [' ', ' ', ' ', ' ', ' '], [' ', ' ', ' ', ' ', ' '], [' ', ' ', ' ', ' ', ' ']] 

变为:

tablero= [['', '1', ' ', ' ', ' ', ' ', ' ', ''], ['', '2', ' ', ' ', ' ', ' ', ' ', ''], ['', '3', ' ', ' ', ' ', ' ', ' ', ''], ['', '4', ' ', ' ', ' ', ' ', ' ', '']] 

换句话说,我的功能是打印和修改的列表,而不是只打印...

如果有人能帮助我,那将会很棒。

+0

我认为如果您研究了可变性,不变性,传值,值 - 参考,浅拷贝和深度拷贝的概念,那么这将是最好的。目前你的代码有很多错误,完整的答案会很长。 – Shashank 2015-04-02 07:41:20

Python列表是可变的。为了防止编辑原始列表,您可以将列表副本传递给函数而不是原件。

refrescartablero(list(tablero))