Baba a écrit :
Hi
I am working on an exercise which requires me to write a funtion that
will check if a given word can be found in a given dictionary (the
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."""
I don't understand this part: Does not mutate hand or word_list
Everything in Python is an object. A few objects are immutable (ints,
strings, tuples...), ie you there's no way to modify the state of the
object in place. Most objects are mutable, and this obviously includes
lists and dicts (you can add / remove / replace list or dicts elements).
Now the point is that when passing an object as argument to a function,
you don't pass a copy of the object but the object itself, so if the
object is mutable, you can mutate if from within the function.
A simple (and really dumb) example being worth a thousand words:
# mutate.py
def update_dict(dic, key, value):
print "in update_dic : dic id is %s" % id(dic)
dic[key] = value
def main():
dic = dict(a=1, b=2)
lst = [1, 2, 3]
print "in main : dic id is %s" % id(dic)
print "dic : %s" % dic
print "calling update_dict"
update_dict(dic, "c", 3)
print "after update_dict"
print "in main : dic id is %s" % id(dic)
print "dic : %s" % dic
if __name__ == '__main__':
main()
I know that a ditionary is unordered. How Can i however avoid
'acidental' mutation?
This has nothing to do with dicts being ordered or not. And there's NO
"accidental" mutation - you have to explicitely call a method or
operator that mutate the dict.
--
http://mail.python.org/mailman/listinfo/python-list