为什么python附加了两个变量而不是一个?
这是我对问题的再现: 卡片=['10S'、['9S']、['5H'、['JD']] 双手=[] 对于卡中的x: 手.附录 打印手-['10S',9S',['5H',JD']] 打印卡-['10S'、['9S']、['5H'、['JD']] 手[0]。追加KKK 打印手-['10S',9S',KKK',['5H',JD']] 打印卡-['10S',9S',KKK'],['5H',JD']???? 很简单:Hands.appendx没有复制任何东西,只是添加了引用 将上述内容与以下内容进行比较: 卡片=['10S'、['9S']、['5H'、['JD']] 双手=[] 对于卡中的x: 这是一份复印件 打印手-['10S',9S',['5H',JD']] 打印卡-['10S'、['9S']、['5H'、['JD']] 手[0]。追加KKK 打印手-['10S',9S',KKK',['5H',JD']] 打印卡-['10S'、['9S']、['5H'、['JD']]为什么python附加了两个变量而不是一个?,python,list,Python,List,这是我对问题的再现: 卡片=['10S'、['9S']、['5H'、['JD']] 双手=[] 对于卡中的x: 手.附录 打印手-['10S',9S',['5H',JD']] 打印卡-['10S'、['9S']、['5H'、['JD']] 手[0]。追加KKK 打印手-['10S',9S',KKK',['5H',JD']] 打印卡-['10S',9S',KKK'],['5H',JD']???? 很简单:Hands.appendx没有复制任何东西,只是添加了引用 将上述内容与以下内容进行比较: 卡
你必须提供一份工作。几乎可以肯定的是,这是因为两个变量都指向同一个对象。为什么这有字典标签?回答了你的问题吗?@YevhenKuzmovych,它没有帮助。我得到了同样的结果。我把代码改成了可复制的。你能帮我查一下吗?谢谢。根据@quamrana的答案和我发布的链接中的答案,你需要在添加时深度复制你的列表。例如,self.Hands.appendx[:]或self.Hands.appendlistx。与我相同,但当我在课堂形式中执行相同操作时,手和卡片都会被KKK项附加。我不明白为什么,为了我的生命。所以你需要一种复制你的实例的方法。我修复了代码,使其可复制。你能检查一下你是否能帮忙吗。谢谢。深度复制修复了它。来自@Yevhen Kuzmovych的建议。也非常感谢。
class PokerGame:
def __init__(self):
self.Cards = [['A', 'Q'], ['K', '10']]
self.Hands = []
def Play(self):
print(self.Hands) # []
print(self.Cards) # [['A', 'Q'], ['K', '10']]
for x in self.Cards:
self.Hands.append(x)
print(self.Hands) # [['A', 'Q'], ['K', '10']]
print(self.Cards) # [['A', 'Q'], ['K', '10']]
self.Hands[0].append("KKK")
print(self.Hands) # [['A', 'Q', 'KKK'], ['K', '10']]
print(self.Cards) # [['A', 'Q', 'KKK'], ['K', '10']]???
b = PokerGame()
b.Play()