python for循环中修改变量的疑问

python for循环中修改变量的疑问

代码:

list = [1, 2, 3, 4, 5]

for item in list:

item = 999

print(list)

list2 = [{'1': 1}, {'1': 1}]

for item in list2:

item['1'] = 999

print(list2)

输出:

[1, 2, 3, 4, 5]

[{'1': 999}, {'1': 999}]

为什么第一种无法修改,而第二种修改成功了?
我怎么判断能不能修改成功?


回答:

python中其实最多的就是引用了
看下第一个代码

list = [1, 2, 3, 4, 5]

for item in list:

item = 999

我把这个代码改变下就更容易看了

for i in range(len(list)):

item = list[i] # 到这就等价于上面代码的 for item in list,item指向list中的元素

item = 999 # 到这一步,item重新赋值了,但list中的元素没有发生任何改变.

然后第二个代码

list2 = [{'1': 1}, {'1': 1}]

for item in list2:

item[1]=999

# 改变下,看的清晰些

for i in range(len(list2)):

item = list2[i] # 这里item指向list2[i],list2[i]是是一个列表,

item[1] = 999 # 执行这一步就是简单的修改列表中元素的值

这个其实python中可变与不可变类型,主要还是说的python中的引用。


回答:

list1里是item 是 number,值类型,list2里是对象{‘1’: 1},是引用类型。百度下这两种类型


回答:

number和dict类型不一样,在list中的引用是不一样的,所以在第一种中item等于是复制出来的,是一个全新的变量,里面的值也是全新的,所以你修改后实际上修改的是item,而不是list里面的值,而第二种方式list的dict是一种引用,就如同是关联,遍历出来的item虽然是新的变量,但是也是关联到到同一个dict, 所以你修改item的时就等于是修改list里面的

以上是 python for循环中修改变量的疑问 的全部内容, 来源链接: utcz.com/p/937896.html

回到顶部