python 可变对象的疑惑

最近学习Python的时候遇到了一点疑惑, 一时不知道该怎么理解, 如下:

使用版本为python3.6

假设有下面三段代码:

l = [1]
print(id(l))
l.append(2)
print(id(l))

上面这段代码可以发现地址不变

l = [1]
print(id(l))
l += [2]
print(id(l))

上面这段代码可以发现地址仍旧不变

l = [1]
print(id(l))
l = l + [2]
print(id(l))

上面这段代码发现地址变了

本人的理解仅限于知道列表是可变对象, 但是上面三段代码却不知道该如何解释其中的原理, 感觉还是有一些地方没有理解清楚.

望能有前辈解答, 不胜感激

阅读 1.6k
1 个回答

三种方式内部原理是不同的,+= 和 append都是原地操作,即直接向列表中加元素,而列表是引用类型,只是一个地址,所以他的id()一样。最后一种方式两个列表组合成为一个新的列表返回,新列表肯定指向不同的地址,所以id变了

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题