Home > Blockchain >  Why can |= do in-place value update for dictionaries in Python?
Why can |= do in-place value update for dictionaries in Python?

Time:11-02

So here is the code

tmp_dict = {}
x = tmp_dict.setdefault("key1", set())
x |= {1,2}  
tmp_dict

And the output is

{'key1': {1, 2}}

But if we change the 3rd line to x = x | {1,2} then the output would be

{'key1': set()}

So I am curious why |= does such magic here that the dictionary gets updated. I thought x = x | {1,2} and x |= {1,2} would be equivalent but actually they are not.

CodePudding user response:

It's because |= references __ior__, but | references __or__.

|= will modify the original x object, which would effect the tmp_dict, but modifying x = .. would override x completely so that the reference to tmp_dict would be gone.

It would just create a variable named x with the union of the sets.

  • Related