何时使用字典|(合并)vs |=(更新)运算符

2024-04-27 05:10:50 发布

您现在位置:Python中文网/ 问答频道 /正文

何时在字典上使用合并与更新运算符。
下面的示例虽然在如何调用它们方面存在差异,但它们的输出是相同的

a = {1: 'a', 2: 'b', 3: 'c', 6: 'in both'}
b = {4: 'd', 5: 'e', 6: 'but different'}

使用更新操作符

z = a | b    
print(z)

Output: {1: 'a', 2: 'b', 3: 'c', 6: 'but different', 4: 'd', 5: 'e'}

使用合并运算符

a |= b
print(a)

Output: {1: 'a', 2: 'b', 3: 'c', 6: 'but different', 4: 'd', 5: 'e'}

似乎|(合并)的唯一优点是它不会覆盖您的旧词典。
我还缺少什么吗?
什么时候我应该选择使用其中一个而不是另一个


Tags: in示例output字典运算符差异词典but
1条回答
网友
1楼 · 发布于 2024-04-27 05:10:50

|=操作符只是用union操作的结果更新原始字典。|运算符返回一个新字典,它是两个dict的并集。假设我们有两套

a = {'hello', 'world', 'abc', 'def'}
b = {'abc', 'ghi', 'jkl'}

操作a |= b类似于a = a | b,其方式与列表的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现在是一个新集合在内存中的不同位置

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仍然是内存中相同位置的旧集,但其内容已更新

相关问题 更多 >