I am struggling to understand updating a 'global' dictionary (i.e., it's defined in the main module and I want to update it in a subroutine). I understand that I need to do something since dict_1 in the mainline isn't what would be updated in a function. So I tried this experiment:
Can anyone tell me what I'm missing here?
Paul
dict_1 = {} dict_2 = {} def upd_dict1(dict_1_copy): print("sub dict_1_copy a is " + str(dict_1_copy["a"])) dict_1_copy["a"] = 100 print("sub dict_1_copy a is " + str(dict_1_copy["a"])) return dict_1_copy if __name__ == "__main__": dict_1["a"] = 1 dict_1["b"] = 2 dict_2["a"] = 0 dict_2["b"] = 22 print("dict_1 a is " + str(dict_1["a"]) + " b4 upd - sb 1") print("dict_1 b is " + str(dict_1["b"]) + " b4 upd - sb 2") print("dict_2 a is " + str(dict_2["a"]) + " b4 upd - sb 0") print("dict_2 b is " + str(dict_2["b"]) + " b4 upd - sb 22\n") dict_2 = upd_dict1(dict_1) print("dict_1 a is " + str(dict_1["a"]) + " aft upd - sb 1") print("dict_1 b is " + str(dict_1["b"]) + " aft upd - sb 2") print("dict_2 a is " + str(dict_2["a"]) + " aft upd - sb 100") print("dict_2 b is " + str(dict_2["b"]) + " aft upd - sb 2\n") dict_1 = dict_2 print("dict_1 a is " + str(dict_1["a"]) + " aft copy - sb 100") print("dict_1 b is " + str(dict_1["b"]) + " aft copy - sb 2") print("dict_2 a is " + str(dict_2["a"]) + " aft copy - sb 100") print("dict_2 b is " + str(dict_2["b"]) + " aft copy - sb 2")Which *should* give the results shown as "sb X" in the print statements. But what I get is
Output:dict_1 a is 1 b4 upd - sb 1
dict_1 b is 2 b4 upd - sb 2
dict_2 a is 0 b4 upd - sb 0
dict_2 b is 22 b4 upd - sb 22
sub dict_1_copy a is 1
sub dict_1_copy a is 100
dict_1 a is 100 aft upd - sb 1 <-- THIS
dict_1 b is 2 aft upd - sb 2
dict_2 a is 100 aft upd - sb 100
dict_2 b is 2 aft upd - sb 2
dict_1 a is 100 aft copy - sb 100
dict_1 b is 2 aft copy - sb 2
dict_2 a is 100 aft copy - sb 100
dict_2 b is 2 aft copy - sb 2
I completely do not understand why the line marked THIS get what it gets.Can anyone tell me what I'm missing here?
Paul