使用 Python 3.4 并完成 O'Reily 书中的示例。 示例显示:
A = ['spam']
B = A
B[0] = 'shrubbery'
运行print A
后的结果:
'shrubbery'
现在我的思考过程是 A
已定义但从未更改。
这个例子产生了不同的结果
A = 'string'
B = A
B = 'dog'
这是运行 print A
后的结果:
'string'
谁能解释一下?
最佳答案
在第一个示例中,您正在修改 B
引用的列表。
正在做:
B[0] = 'shrubbery'
告诉 Python 将 B
引用的列表中的第一项设置为 'shrubbery'
的值。此外,该列表恰好与 A
引用的列表相同。这是因为:
B = A
导致 B
和 A
都引用同一个列表:
>>> A = ['spam']
>>> B = A
>>> A is B
True
>>>
因此,对 B
引用的列表的任何更改也会影响 A
引用的列表(反之亦然),因为它们是同一个对象。
然而,第二个例子没有修改任何东西。相反,它只是重新分配名称B
给一个新值。
执行此行后:
B = 'dog'
B
不再引用字符串 'string'
,而是引用新字符串 'dog'
。 A
的值同时保持不变。
关于python - 共享引用和平等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27762895/