python列表乘一个数字 您所在的位置:网站首页 python的list每个数字乘2 python列表乘一个数字

python列表乘一个数字

2022-05-06 15:43| 来源: 网络整理| 查看: 265

以不可变对象为元素的列表

a=[1,2]

b=a*3

#则b为

[1,2,1,2,1,2]

以可变对象为元素的列表

#如列表以列表为元素

a=[[1]]

b=a*3

#则b为

[[1],[1],[1]]

#不过有趣的是

id(b[0])==id(b[1])==id(b[2])

#也就是说b的三个列表元素项都是引用的一个原先的列表元素项,

#实际上并没有新的列表元素项产生,这与直接定义b=[[1],[1],[1]]

#是截然不同的,直接定义的b其各列表元素项的id值是不同的

以上的文字解释可能还不太清楚,我们这里以图片辅助说明:

如图为a*3所得到的b的内存中的示意图,其0、1、2下标项所指向的都是列表元素项[1],而该项的下标0对应的又指向内存中的数值1。

如图为直接定义的b=[[1],[1],[1]]。可见其0、1、2下标项分别指向三个不同的列表元素项[1],而这三个不同的列表元素项的下标0对应的自然也都是内存中的数值1。

同时含有可变对象与不可变对象作为元素

a=[[1],2]

b=a*3

#则b为

[[1],2,[1],2,[1],2]

#并且仍然有

id(b[0])==id(b[2])==id(b[4])

总结

python中的这个现象,我个人认为更是一种语言实现上的bug ,并不真的是什么有趣的知识点。很自然的逻辑,我们对于a*3得到的b,希望分别对b[0]和b[1]修改时,会发现竟然会是同时修改的(a=[[1]]),这太容易导致错误了,与一般性的逻辑不符。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有