我可能没有正确使用字典,但无论如何,这是我试图做的:
1.设置一个起始字典。这将被用作空模板。
1.将字典传递给一个函数。在函数中,它将被分配一个新的变量名,这样我就可以对它做一些事情。
1.通过向字典中添加条目来处理字典。
1.将字典返回到主代码中的其他变量。
1.对主代码中的另一个变量重复上述操作。每一次都要接受模板字典并对它做一些事情。
但似乎发生的是,“起始”字典也更新了,所以当我第二次通过它时,它充满了我不想要的信息。
下面是一个最小的例子:
startDeck = {
"deckSize":0,
"score":0,
"blackjack":False,
}
def playBlackjack(deck):
userDeck = dealCards(cards= deck,count=2)
compDeck = dealCards(cards= deck,count=1)
def dealCards(cards,count):
score = cards["score"]
deckSize = cards["deckSize"]
for n in range(count):
newCard = {}
deckSize+=1
score+=1
cardNo = "card" + str(deckSize)
newCard["card"] = "hearts"
newCard["value"] = 10
newCard["suit"] = "clubs"
cards[cardNo]=newCard
cards["score"]=score
cards["deckSize"]=deckSize
return cards
playBlackjack(startDeck)
我觉得应该可以。我知道这可能没有多大意义,也许我不应该使用字典,但我确实与他们斗争,并希望有一个去与他们了解更多。
但本质上这里发生的是所有的字典,无论是顶部的“startDeck”(我认为它是全局的,因此对任何函数都可用,但我一直被python告知它看不到它?))或我认为只在函数运行时存在的字典,最终都填充了完全相同的信息。我不明白为什么。
1条答案
按热度按时间x6492ojm1#
这是因为字典是作为引用传递的。你可以通过谷歌搜索“引用与值类型”来了解更多,有很多关于这个主题的资源。
这是一个基本的编程概念,为了知道你正在操作什么对象,理解它是很重要的(特别是Python,因为它会做一些其他语言可能会抱怨的事情)。它是一个强有力的工具,如果使用明智。
快速总结一下你的问题,Python不会在你的函数
playBlackJack
中创建一个新对象,因为字典是引用类型的一部分。要获得词典的副本,您可以: