在Python中创建MxN的数组
在Python中创建MxN的数组
在Python中创建M x N的数组⼀般有三种⽅法:
列表乘法
高考营养品dp = [[0] * n] * m
for 循环
dp= [[0 for _ in range(n)] for _ in range(m )]
乘法+for循环
dp = [[0] * n for _ in range(m )]
但是,在使⽤列表乘法创建的时候会出现问题:十大悍匪
dp = [[0]*2]*2
print(dp) # [[0, 0], [0, 0]]
print(id(dp[0])) #3142462401856
print(id(dp[1])) #3142462401856当我想起你的时候
dp[0][1] = 2
print(dp) # [[0, 2], [0, 2]]
这说明在⼆维列表乘法的时候外层只是⽤了引⽤,⽽不是新开辟空间建⽴数组. 从地址上也可以看出来,dp[0]和dp[1]实际上指向了同⼀个对象。因此,当尝试修改dp[0]中的元素的时候,dp[1]中的对应元素会同时修改。问题在于外层的乘法实际上已经是引⽤型。
同理,如果⼀维列表乘法的时候⽤的就是引⽤类型的数据,也会出现⼀样的情况
class A():
def __init__(self,a=0,b=1):
self.a = a
self.b = b
def change(self,c):那个成语形容夫妻情深
self.a = c
return 1
def __repr__(self):
return "A:[{},{}]".format(self.a,self.b)
if __name__ == "__main__":
test = A(2,3)
print(test) # A:[2,3]
u盾
testlist = [test]*3
print(testlist) # [A:[2,3], A:[2,3], A:[2,3]]
最近有什么好看的韩剧test.change(5)
print(test) # A:[5,3]
print(testlist) # [A:[5,3], A:[5,3], A:[5,3]]

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。