python 3.8.6 中意外修改列表的函数
A function unwantedly modifying a list in a python 3.8.6
我正在制作 21 点主机游戏。基本上,我为该程序创建并需要的一个功能是为玩家和庄家输出手牌的功能。如果您曾经玩过二十一点,您就会知道庄家隐藏了一张牌。所以当这个函数输出手牌时,应该用问号替换庄家手牌列表中的第一个值。它就是这样做的。但是它也在函数之外修改了列表,这是一个问题。我已将该函数单独隔离到一个脚本中,以确保它是问题的根本原因,而不是我程序中的其他原因:
def outputDecks(a, b, hiddenBool):
bModif = b
if hiddenBool == True:
bModif[0] = "?"
print("Player Cards: " + str(a))
print("Dealer Cards: " + str(bModif) + "\n")
a = [1, 2, 3, 4]
b = [5, 6, 7, 8]
outputDecks(a, b, True)
print(a)
print(b)
这是输出:
Player Cards: [1, 2, 3, 4]
Dealer Cards: ['?', 6, 7, 8]
[1, 2, 3, 4]
['?', 6, 7, 8]
希望你能看到这里的问题。我已经将列表输入到函数中。需要用问号显示的列表 b 将其内容复制到一个新变量中,并用问号修改该变量。然而,当我在 运行 函数之后打印列表时,问号不存在。但是我从来没有修改过原始列表,所以为什么会有问号?我希望这不是一个有明显修复的真正愚蠢的问题,我在浪费你们大家的时间,但我已经盯着这个问题看了将近一个小时,但无法弄清楚。我尝试谷歌搜索但找不到解决方案,可能是因为我不知道如何用词来搜索。真心希望大家帮帮我
您需要复制b
或bModif
将被引用
bModif = b.copy()
List b, the one that needs to be displayed with the question mark, has its contents copied into a new variable, and that variable is modified with the question mark
这就是问题所在。 bModif = b
不会将 b 内容复制到 bModif
。 bModif
是对 b
引用的同一个列表的引用。如果您想要 python 中的列表副本,请使用 bModif = b.copy()
我正在制作 21 点主机游戏。基本上,我为该程序创建并需要的一个功能是为玩家和庄家输出手牌的功能。如果您曾经玩过二十一点,您就会知道庄家隐藏了一张牌。所以当这个函数输出手牌时,应该用问号替换庄家手牌列表中的第一个值。它就是这样做的。但是它也在函数之外修改了列表,这是一个问题。我已将该函数单独隔离到一个脚本中,以确保它是问题的根本原因,而不是我程序中的其他原因:
def outputDecks(a, b, hiddenBool):
bModif = b
if hiddenBool == True:
bModif[0] = "?"
print("Player Cards: " + str(a))
print("Dealer Cards: " + str(bModif) + "\n")
a = [1, 2, 3, 4]
b = [5, 6, 7, 8]
outputDecks(a, b, True)
print(a)
print(b)
这是输出:
Player Cards: [1, 2, 3, 4]
Dealer Cards: ['?', 6, 7, 8]
[1, 2, 3, 4]
['?', 6, 7, 8]
希望你能看到这里的问题。我已经将列表输入到函数中。需要用问号显示的列表 b 将其内容复制到一个新变量中,并用问号修改该变量。然而,当我在 运行 函数之后打印列表时,问号不存在。但是我从来没有修改过原始列表,所以为什么会有问号?我希望这不是一个有明显修复的真正愚蠢的问题,我在浪费你们大家的时间,但我已经盯着这个问题看了将近一个小时,但无法弄清楚。我尝试谷歌搜索但找不到解决方案,可能是因为我不知道如何用词来搜索。真心希望大家帮帮我
您需要复制b
或bModif
将被引用
bModif = b.copy()
List b, the one that needs to be displayed with the question mark, has its contents copied into a new variable, and that variable is modified with the question mark
这就是问题所在。 bModif = b
不会将 b 内容复制到 bModif
。 bModif
是对 b
引用的同一个列表的引用。如果您想要 python 中的列表副本,请使用 bModif = b.copy()