【Python基础】为什么更改列表'y'也会更改列表'x'?
机器学习初学者
共 943字,需浏览 2分钟
·
2020-10-31 21:34
x = []
y = x
y.append(10)
print(y)
print(x)
上面这段代码的输出结果如下:
[10]
[10]
为什么我只是给列表y追加了一个元素,而列表x也改变了???
产生这样的结果有两个原因:
(1)变量只是指向具体对象的名称,当在执行y=x语句时,并不会为列表创建一个副本,而只是创建了一个新变量y指向x所指向的同一个对象。这也就是说只存在一个对象(列表),x和y都只是对它的引用。
(2)列表属于mutable(可变)对象,这意味着可以改变它的内容。
在调用append()之后,这个可变对象的内容由[]变为[10]。由于两个变量都指向同一对象,因此使用任何一个名称所访问到的都是修改后的值[10]。
我们再来看一段代码:
x = 5
y = x
x = x + 1
print(x)
print(y)
上面这段代码的输出结果为:
6
5
通过前面的学习,输出结果好像不应该是一样的吗???
当然不!因为整数是immutable(不可变)对象,当我们执行x=x+1语句时,我们并不是改变5这个对象的值,而是创建一个新的对象(整数6)并将其赋值给x(也就是改变了x所指向的对象)。在赋值之后我们就有了两个对象(整数6和5)以及分别指向它们的两个变量(x指向6而y指向5)。
1.如果我们有一个可变对象(list等),我们可以使用某些特定的操作来改变它,所有指向它的变量都会显示它的改变
2.如果我们有一个不可变对象(int等),所有指向它的变量都将显示相同样的值,只要是会改变这个值的操作都将总是返回一个新的对象
往期精彩回顾
获取一折本站知识星球优惠券,复制链接直接打开:
https://t.zsxq.com/y7uvZF6
本站qq群704220115。
加入微信群请扫码:
评论