当前位置: 首页 > 图灵资讯 > 行业资讯> 警惕python中的*重复符(运算符)

警惕python中的*重复符(运算符)

发布时间:2025-09-22 10:56:56

python中有一个特殊的符号“*”,可以用作数值运算的乘法算子和对象的重复算子,但在使用重复算子时必须注意

注意:*重复的对象有相同的ID,即指向内存中的相同地址,必须注意每个对象的操作。

举例来说:

>>>alist=[range(3)]*4
>>>alist
[0,1,2],[0,1,2],[0,1,2],[0,1,2]

上面是用来模拟矩阵的初始化二层列表,4X3的矩阵,为了方便描述,这里的矩阵是A。

现在我想给A11赋值1,使用以下代码:

alist[0][0]=1

我们想要的结果应该是:

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

但不幸的是,我们得到的是:

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

这是怎么回事?为什么给A21赋值,为什么其他Ai1都变了?

原因如下:

正如我们在文章开头所说,*重复的对象有相同的ID,即指向内存中的相同地址,并且在操作每个对象时必须注意。

当我们再次初始化时,我们使用重复算子"*",当对象重复操作时,该操作符将重复的所有对象指向相同的内存地址,当您更改其中一个值时,

其它值自然会更新,用python的话来解释就是下面的命令和输出:

>>>id(alist[0])
18858192
>>>id(alist[1])
18858192
>>>id(alist[2])
18858192
>>>id(alist[3])
18858192
>>>

看到了,id都是一样的,也就是说这四个list是一样的。list”。

在这种情况下,如果我们想模拟一个矩阵,我们该怎么办?除了特殊的numpy包,你当然可以给上层listappend新的list,比如:

>>>blist=[]
>>>foriinrange(4):
blist.append([jforjinrange(3)])
>>>blist
[0,1,2],[0,1,2],[0,1,2],[0,1,2]

这样,我们就可以再次尝试上述赋值操作:

>>>blist[0][0]=1
>>>blist
[1,1,2],[0,1,2],[0,1,2],[0,1,2]
>>>

相关文章

Python中reduce函数和lambda表达式的学习

Python中reduce函数和lambda表达式的学习

2025-09-25
Python小白必学的面向对象

Python小白必学的面向对象

2025-09-25
一个例子解释python装饰器

一个例子解释python装饰器

2025-09-25
深入理解Python的set和dict

深入理解Python的set和dict

2025-09-25
Python中正则表达式的巧妙使用

Python中正则表达式的巧妙使用

2025-09-25
5分钟搞定Python中函数的参数

5分钟搞定Python中函数的参数

2025-09-25