为什么输出没有变化?

时间:2019-06-11 07:54:37

标签: python list reference concatenation

我正在为周三的Python决赛做准备。 我在列表中的引用存在一些问题。 我需要对发生的事情进行一些解释。

我尝试通过老师的笔记进行谷歌搜索/搜索都没有结果

如果我有以下python代码:

A部分)

a = [1,2]
b = [1,[2], 3]
c = [a] + [b]
b = 0
print(c)

但我要说的是

B部分)

a = [1,2]
b = [1,[2], 3]
c = [a] + [b]
b[0] = -1
print(c)

A部分) c的输出= [[1、2],[1、2,[3]]]

为什么c不能打印为[[1,2 ,, [0]]?

B部分) c的输出将为= [[1、2],[-1,[2],3]]

在这种情况下,似乎修改了对对象c内部的b的引用,但在其他情况下却没有。

我必须为此绘制一个箭头图,所以关于引用发生了什么以及为什么如果我通过索引更改b似乎会更改c内的b,这一切都真令人困惑,但是如果我更改b是指的是,c仍指的是b的旧值,而不是b的新值?

1 个答案:

答案 0 :(得分:1)

c = [a] + [b]将使用变量a和变量b的值,它们都是列表。 b = 0更改了b的内容,使它忘记了所保存的先前值(该值保持不变,b不再引用它了)。 b[0] = -1不会更改b,它会更改值b引用;由于该值也被c中当前的列表引用,因此您将观察到c中的更改。

我最好的建议是通过非常有效的Python Visualizer工具运行这两段代码:snippet 1snippet 2,并观察程序的运行方式(按“ Visualize Execution”按钮)