尽管有 .copy(),为什么我的不同实例变量链接在一起?
Why are my different instance variables linking together despite the .copy()?
作为python的新手,我觉得每一个微不足道的问题都随便问问陌生人问题是什么,但经过研究后,我找不到问题所在。
我创建的是一个使用列表中的列表的 2D 网格移动系统。最终目标是让用户不断地穿过走廊,但在第一个走廊之后,礼物会不断出现在设定的位置。然而,当用户第一次走过礼物时,礼物从硬编码艺术 (lobby_art) 中删除,该艺术仅连接到被编辑的列表 (currentlocation)。
下面尝试从代码中挖掘出问题并进行简化。
lobby_art = [
['‖ ', ' ', ' ‖'],
['‖ ', '', ' ‖'],
['‖ ', ' ', ' ‖'],
['‖ ', '', ' ‖'],
]
currentlocation = [
['‖ ', ' ', ' ‖'],
['‖ ', ' ', ' ‖'],
['‖ ', ' ', ' ‖'],
['‖ ', '', ' ‖'],
]
def moveup(direction):
if direction == 'w':
global currentlocation
global userlocationY
if userlocationY == 0:
global leave_corridor
leave_corridor = False
currentlocation[userlocationY][1] = ' ' #deletes previous location
return
currentlocation[userlocationY][1] = ' '
userlocationY -= 1
currentlocation[userlocationY][1] = ''
def lobbyprint(): #Prints Lobby layout
global currentlocation
for i in currentlocation:
print(''.join(i))
Corridor_with_present = False
GameOngoing = True
while GameOngoing:
if Corridor_with_present == True:
currentlocation = lobby_art.copy()
leave_corridor = True
userlocationY = 3
while leave_corridor:
lobbyprint()
direction = input("Input w: ")
moveup(direction)
Corridor_with_present = True
输出
‖ ‖
‖ ‖
‖ ‖
‖ ‖
Input w: w
‖ ‖
‖ ‖
‖ ‖
‖ ‖
Input w: w
‖ ‖
‖ ‖
‖ ‖
‖ ‖
Input w: w
‖ ‖
‖ ‖
‖ ‖
‖ ‖
Input w: w
‖ ‖
‖ ‖
‖ ‖
‖ ‖
Input w: w
‖ ‖
‖ ‖
‖ ‖
‖ ‖
Input w: w
‖ ‖
‖ ‖
‖ ‖
‖ ‖
Input w: w
‖ ‖
‖ ‖
‖ ‖
‖ ‖
Input w: w
‖ ‖
‖ ‖
‖ ‖
‖ ‖
Input w: w
‖ ‖
‖ ‖
‖ ‖
‖ ‖
Input w:
我尝试过使用 .copy()、[:],甚至在语句中导入副本,但无济于事。
if Corridor_with_present == True:
currentlocation = lobby_art.copy()
有人知道为什么吗?
谢谢罗伯特。
试试这个:
import copy
if Corridor_with_present == True:
currentlocation = copy.deepcopy(lobby_art)
lobby_art.copy()只是复制引用,而copy.deepcopy(lobby_art)
复制内存中的整个对象。
如下图所示:
作为python的新手,我觉得每一个微不足道的问题都随便问问陌生人问题是什么,但经过研究后,我找不到问题所在。 我创建的是一个使用列表中的列表的 2D 网格移动系统。最终目标是让用户不断地穿过走廊,但在第一个走廊之后,礼物会不断出现在设定的位置。然而,当用户第一次走过礼物时,礼物从硬编码艺术 (lobby_art) 中删除,该艺术仅连接到被编辑的列表 (currentlocation)。 下面尝试从代码中挖掘出问题并进行简化。
lobby_art = [
['‖ ', ' ', ' ‖'],
['‖ ', '', ' ‖'],
['‖ ', ' ', ' ‖'],
['‖ ', '', ' ‖'],
]
currentlocation = [
['‖ ', ' ', ' ‖'],
['‖ ', ' ', ' ‖'],
['‖ ', ' ', ' ‖'],
['‖ ', '', ' ‖'],
]
def moveup(direction):
if direction == 'w':
global currentlocation
global userlocationY
if userlocationY == 0:
global leave_corridor
leave_corridor = False
currentlocation[userlocationY][1] = ' ' #deletes previous location
return
currentlocation[userlocationY][1] = ' '
userlocationY -= 1
currentlocation[userlocationY][1] = ''
def lobbyprint(): #Prints Lobby layout
global currentlocation
for i in currentlocation:
print(''.join(i))
Corridor_with_present = False
GameOngoing = True
while GameOngoing:
if Corridor_with_present == True:
currentlocation = lobby_art.copy()
leave_corridor = True
userlocationY = 3
while leave_corridor:
lobbyprint()
direction = input("Input w: ")
moveup(direction)
Corridor_with_present = True
输出
‖ ‖
‖ ‖
‖ ‖
‖ ‖
Input w: w
‖ ‖
‖ ‖
‖ ‖
‖ ‖
Input w: w
‖ ‖
‖ ‖
‖ ‖
‖ ‖
Input w: w
‖ ‖
‖ ‖
‖ ‖
‖ ‖
Input w: w
‖ ‖
‖ ‖
‖ ‖
‖ ‖
Input w: w
‖ ‖
‖ ‖
‖ ‖
‖ ‖
Input w: w
‖ ‖
‖ ‖
‖ ‖
‖ ‖
Input w: w
‖ ‖
‖ ‖
‖ ‖
‖ ‖
Input w: w
‖ ‖
‖ ‖
‖ ‖
‖ ‖
Input w: w
‖ ‖
‖ ‖
‖ ‖
‖ ‖
Input w:
我尝试过使用 .copy()、[:],甚至在语句中导入副本,但无济于事。
if Corridor_with_present == True:
currentlocation = lobby_art.copy()
有人知道为什么吗?
谢谢罗伯特。
试试这个:
import copy
if Corridor_with_present == True:
currentlocation = copy.deepcopy(lobby_art)
lobby_art.copy()只是复制引用,而copy.deepcopy(lobby_art)
复制内存中的整个对象。
如下图所示: