【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)

上面这段代码的输出结果为:

65



通过前面的学习,输出结果好像不应该是一样的吗???


当然不!因为整数是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。

加入微信群请扫码:

浏览 49
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报