通过 MIT Open Courseware 自学 Python,遇到了下面这段代码的问题。当我单独或在另一个函数中运行此函数时,它会改变最初传递的值“hand”,我不知道为什么。我将两个局部变量(hand0 和 tester)设置为 hand,第一个用于保留初始值,第二个用于迭代。但是,这三个都发生了变化,而我只希望“测试人员”这样做。除了改变“手”之外,该功能按预期工作。
(传递给函数的值在设置参数中有所不同:word_list 是有效英语单词的列表,word 是我在此函数中替换以进行测试的字符串,hand 是字母字典及其相关计数。调试代码已注释掉.)
def is_valid_word(word, hand, word_list):
"""
Returns True if word is in the word_list and is entirely
composed of letters in the hand. Otherwise, returns False.
Does not mutate hand or word_list.
word: string
hand: dictionary (string -> int)
word_list: list of lowercase strings
"""
hand0 = hand
tester = hand
#display_hand(hand)
#display_hand(tester)
word = raw_input('test word: ')
length = len(word)
disc = True
for c in range(length):
if word[c] in tester.keys() and tester[word[c]]>0:
#print tester[word[c]]
#display_hand(hand)
#display_hand(tester)
tester[word[c]]=tester[word[c]]-1
else:
#print 'nope'
disc = False
if word not in word_list:
disc = False
#print disc
#display_hand(hand)
#display_hand(tester)
#display_hand(hand0)
return disc