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

Reply via email to