使用for循环在python中分配数组值

在 Python3 中动态创建二维数组时,在以下情况下不会更新值:


no_col = 3

no_row = 4


arr = [[0 for x in range(no_col)] for y in range(no_row)] 


for i in arr[0]:

    i = 1

arr 值


0 0 0

0 0 0

0 0 0

0 0 0

但是在使用范围时,值会更新


for i in range(no_col):

    arr[0][i] = 1

arr 值


1 1 1

0 0 0

0 0 0

0 0 0

为什么会这样?


慕少森
浏览 252回答 3
3回答

aluckdog

这是因为你的每个for i in arr[0]:     i = 1相当于for idx in range(len(arr[0])):     i = arr[0][idx]     i = 1您不能在 for each 循环中修改数组,因为每次迭代都会创建一个新变量,并且您正在修改新变量的值而不是数组看看这个

米脂

a = b在 Python 中的作用存在误解。这并不意味着“修改a数据,使其与b数据相同”。相反,它的意思是:“从现在开始,使用变量名a来引用由变量引用的相同数据b”。请参阅此示例:data = ['a', 'b', 'c']x = data[0]  # x is now 'a', effectively the same as: x = 'a'x = 'b'  # x is now 'b', but `data` was never changeddata[0] = 'm'  # data is now ['m', 'b', 'c'], x is not changeddata[1] = 'm'  # data is now ['m', 'm', 'c'], x is not changed原始代码也会发生同样的情况:for i in arr[0]:    # i is now referencing an object in arr[0]    i = 1    # i is no longer referencing any object in arr, arr did not change

jeck猫

在 python 中,变量不是指针。循环内部发生的事情是1)for each element  in the array 2)copy value of the array element to iterator(Only the value of the array element is copied and not the reference to its memory)3)perform the logic for each iteration.如果您对迭代器对象进行任何更改,您只会修改变量值的副本,而不是原始变量(数组元素)。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python