The |=
运算符只是用并集运算的结果更新原始字典。这|
运算符返回一个新词典这是两个命令的结合。假设我们有两套
a = {'hello', 'world', 'abc', 'def'}
b = {'abc', 'ghi', 'jkl'}
操作a |= b
类似于a = a | b
与a += b
类似于a = a + b
对于列表。
a = {'hello', 'world', 'abc', 'def'}
al = list(a)
b = {'abc', 'ghi', 'jkl'}
bl = list(b)
print("Before: ", hex(id(a)), a)
a = a | b
print("After: ", hex(id(a)), a)
# Output:
# Before: 0x1aa0186f128 {'world', 'def', 'abc', 'hello'}
# After: 0x1aa0186f828 {'world', 'ghi', 'hello', 'jkl', 'def', 'abc'}
print("Before: ", hex(id(al)), al)
al = al + bl
print("After: ", hex(id(al)), al)
# Output:
# Before: 0x1aa0187a248 ['world', 'def', 'abc', 'hello']
# After: 0x1aa0366bdc8 ['world', 'def', 'abc', 'hello', 'jkl', 'abc', 'ghi']
显然,a
现在是一个new set在内存中的不同位置。
a = {'hello', 'world', 'abc', 'def'}
al = list(a)
b = {'abc', 'ghi', 'jkl'}
bl = list(b)
print("Before", hex(id(a)), a)
a |= b
print("After", hex(id(a)), a)
# Output:
# Before 0x1aa0186f128 {'world', 'def', 'abc', 'hello'}
# After 0x1aa0186f128 {'world', 'ghi', 'hello', 'jkl', 'def', 'abc'}
print("Before", hex(id(al)), al)
al += bl
print("After", hex(id(al)), al)
# Output:
# Before 0x1aa03646888 ['world', 'def', 'abc', 'hello']
# After 0x1aa03646888 ['world', 'def', 'abc', 'hello', 'jkl', 'abc', 'ghi']
在这种情况下,a
仍然是old set位于内存中的同一位置,但其内容已更新。