【发布时间】:2021-02-16 01:15:03
【问题描述】:
在下面的程序中,如果 a 引用 b 中的值,而 b 引用 0 中的值,那么最终 a 取决于b 指的是a = b 的值,对吗?所以使用这个类比,如果我更改b 存储的值,那么最终a 应该引用相同的值 b 的值也是如此,但是当我进行这些更改时,我没有得到预期的结果,即 a 中的值不受影响,那么我在哪里误解了?
a = b = 0
print(a, b)
b = 1
print(a, b)
但是,如果我重新编写程序:
a = b = []
print(a, b)
b.append(1)
print(a, b)
然后我们看到a的值随着b的变化而显着变化,为什么?
【问题讨论】:
-
推荐阅读:nedbatchelder.com/text/names.html。在您的第二个示例中,
a的值 没有 改变。 -
@AvenDesta 类型无关。两个示例的工作原理相同
-
“那么我们看到a的值随着b的变化而显着变化,为什么?”不,它没有。
-
@MalikEbadUllah 完全不同。
.append是 mutator 方法,简单赋值不是。 -
@MalikEbadUllah 为什么会这样?
a = b不会“链接”变量。a = <some expression>只是将<some expression>求值的对象分配给a。您只是引用另一个变量作为表达式这一事实并不重要。你从未重新分配a。它仍然引用您上次告诉它引用的对象,并将继续引用,直到您重新分配它。阅读nedbatchelder.com/text/names.html
标签: python