python的列表乘以数字

递归季风
• 阅读 2559

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

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值是不同的

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

python的列表乘以数字

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

python的列表乘以数字

如图为直接定义的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]]),这太容易导致错误了,与一般性的逻辑不符。

点赞
收藏
评论区
推荐文章
梦想橡皮擦 梦想橡皮擦
5年前
4. 列表一学完,Python 会一半,滚雪球学 Python
滚雪球学Python,目标就是让Python学起来之后,越滚越大。四、列表一学完,Python会一半4.1列表是个啥列表,先记住英文为list,它是Python中一种可以动态添加删除内容的数据类型,由一系列的元素组成。直白点说列表是将多个变量组合在一起的那么一个容器。很多文章会找一个与列表相似的编程概念,一般会说P
CuterCorley CuterCorley
4年前
Python 列表 使用技巧
@toc1.列表表达式与列表排序列表中的元素也是可迭代的对象如列表、元组等时,要根据这些元素的某个子元素对列表排序,常规排序方式失效,需要用sorted()函数并指定key。题目:输入一组数到列表nums,请找到列表中任意两个元素相加能够等于9的元素,形成一个元组,使其小数在前大数在后,如:(2,7),(1,8)。重复的元组元素只保留一个,结
Bill78 Bill78
5年前
Python中的基本list操作
List是python中的基本数据结构之一,和Java中的ArrayList有些类似,支持动态的元素的增加。list还支持不同类型的元素在一个列表中,ListisanObject。最基本的创建一个列表的方法myList\'a','b','c'\在python中list也是对象,所以他也有方法和属性,在ptython解释器中使用h
CuterCorley CuterCorley
4年前
商业数据分析从入门到入职(7)Python基础数据结构及其操作
一、列表之前的数据类型一般都是单个值,而不能再存储像矩阵、数组这种结构存储多个元素,要是需要达到这样的目标、需要使用新的数据类型,Python中提供了4种数据结构来存储多个对象,称它们为容器类型(ContainerTypes),包括如下几种类型:列表List元组Tuple字典Dictionary集合Set1.创建列表其实,
梦想橡皮擦 梦想橡皮擦
5年前
6. Python 元组,不可变的列表,滚雪球学 Python
希望看到文章的Python学习爱好者可以坚持打卡,在评论区坚持跟橡皮擦卡学习的朋友,在100天之后,橡皮擦将送出神秘大奖。六、Python元组,不可变的列表今天新学习的概念叫做元组,其实学元组还是离不开列表,第一个知识点是元组的英文tuple要牢牢记住,第一个知识点是元组与列表的区别,列表的元素可以修改,元组的元素不可以修改,所以
Stella981 Stella981
4年前
Redis 列表(List)
Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素导列表的头部(左边)或者尾部(右边)一个列表最多可以包含2321个元素(4294967295,每个列表超过40亿个元素)。实例redis127.0.0.1:6379LPUSHw3ckeyredis(integer)1
Stella981 Stella981
4年前
Python 画图
使用python的科学计算库,达到快速计算的效果。标准的Python中用列表(list)保存一组值,可以当作数组使用。但由于列表的元素可以是任何对象,因此列表中保存的是对象的指针。这样一来,为了保存一个简单的列表\1,2,3\,就需要有三个指针和三个整数对象。对于数值运算来说,这种结构显然比较浪费内存和CPU计算时间。使用numpy的a
Stella981 Stella981
4年前
Python容器
列表列表的元素可以修改的,通过直接赋值就能修改列表的元素。使用\\创建列表:weekdays\'monday','tuesday','wednesday','thursday','friday'\也可以使用list()创建空列表:weekdayslist()使用append()在列表尾部添加元素
Stella981 Stella981
4年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Stella981 Stella981
4年前
Python技巧之检查列表所有元素是否相等
方法有三:1.将列表构造为集合,再判断长度2.用一个元素与所有元素比较3.比较列表第一个元素的个数和列表长度Pythonicwaysofcheckingifallitemsinalistareequal:lst'a','a','a'
卡里笔记 卡里笔记
6个月前
Python 数据类型入门:数字/字符串/列表 元组/字典/ 集合/字节/布尔,新手能直接用的代码指南
本文介绍了Python中常见的数据类型及其特性。数字类型包括整数、浮点数、布尔值和复数,其中bool是int的子类;字符串支持拼接、切片等操作;元组是不可变序列,定义单元素元组需加逗号;列表是可变序列,支持增删改操作;字典以键值对存储,键必须为不可变类型;集合用于存储无序不重复元素,支持集合运算;布尔类型在Python中表现为True/False,可与数字作比较。文章还比较了type()和isinstance()的区别,并提供了各类型的常用操作示例。