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