python的for循环和for each循环遍历时改变变量的结果

python的for循环和for each循环遍历时改变变量的结果,第1张

概述foreach循环python的list是一组可变变量的指针,有长度和容量区别,会自动调整容量,类似于golang的机制 a=[0,1,2] ​ b=[-1]*6 i=0 ​ #姑且称为前者,后者 #foreach前者可以在循环过程中变化 forb[i]ina:   i+=2    print(b)#[0,-1,1,-1,2, foreach循环

python的List是一组可变变量的指针,有长度和容量区别,会自动调整容量,类似于golang的机制

 a=[0,1,2] ​ b=[-1]*6 i=0 ​ #姑且称为前者,后者 #foreach 前者可以在循环过程中变化 for b[i] in a:     i+=2      print(b)#[0, -1, 1, -1, 2, -1]
 a=[     [1,2,3],     [4,5,6],     [7,8,9] ] b=[-1]*3 ​ i=0 #foreach,后者是可遍历对象对象。其实是一个地址拷贝,只会在第一次时候拷贝个地址。以后就算是a[i]引用到其它地方了,也不影响原来的拷贝。这里后者始终是[1, 2, 3] for b[i] in a[i]:#无法得到b=[1,5,9],证明foreach的后者始终是首次拷贝地址     print(a[i])#循环过程可以正常 *** 作a[i]     i+=1      print(b) # [1, 2, 3] # [4, 5, 6] # [7, 8, 9] ​ ​ # [1, 2, 3]
 a = [0, 1, 2, 3, 4] b = [] #foreach 首次就形成一个内置的遍历变量index,每次严格只会index++,遍历的结束条件和原拷贝的长度有关 for i in a:     b.append(i)     a.pop() ​ print(b)  # [0, 1, 2] print(a)  # [0, 1]
 a = [0, 1, 2, 3, 4, 5] b = [] #foreach,每次循环index不会管a是否变化,只是无脑+1。每次如果原拷贝a的值刷新了,在新原拷贝的值里面选出i=a[index]。注意是值刷新,原拷贝本身的地址没有刷新 for i in a:     b.append(i)     a.pop(0) ​ print(b)  # [0, 2, 4] print(a)  # [3, 4, 5] ​
 a = [     [1],     [4, 5],     [7, 8, 9] ] b = [-1] * 3 ​ i = 0 #可见是原拷贝相当于指针常量,未曾变化(即未出现b=[1,5,9]的意外结果) for b[i] in a[i]:     i += 1 ​ print(b)#[1, -1, -1]
 a = [     [11, 12, 13, 14, 15, 16, 17, 18, 19],     [4, 5],     [7, 8, 9] ] c = a[0] b = [-1] * 9 ​ i = 0 #可见在循环过程中,c也指向原拷贝,所以c变化就影响了原拷贝,从而影响了最终的循环次数 for b[i] in a[i]:     i += 1     c.pop() ​ print(b) # [11, 12, 13, 14, 15, -1, -1, -1, -1]
 a = [     [1, 2, 3],     [4, 5, 6],     [7, 8, 9] ] d = [     [11, 12, 13],     [14, 15, 16],     [17, 18, 19] ] b = [-1] * 3 ​ i = 0 #可见b的值其实都是原拷贝那边得到的 for b[i] in a[i]:     a[i] = d[i]     i += 1 ​ print(b) print(a) ​ # [1, 2, 3] # [[11, 12, 13], [14, 15, 16], [17, 18, 19]]
for循环@H_502_51@
 n = 5 b = [] c = [] #可以在for循环中改变前者i,但是每次循环时它会自动重新赋值,以同步到内置的index变量 for i in range(n):     print(i)     b.append(i)     i += 10     c.append(i) print(b) print(c) ​ # 0 # 1 # 2 # 3 # 4 # [0, 1, 2, 3, 4] # [10, 11, 12, 13, 14]
 n=9 b=[] #for循环,后者如果是数字,就是按值拷贝,可见循环中改变了n的值,但是不影响原拷贝 for i in range(n):     b.append(i)     n-=1 print(b) print(n) # [0, 1, 2, 3, 4, 5, 6, 7, 8] # 0
 a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] b = [] #后者是引用型变量也一样,都是先首次仅来一次原拷贝 for i in range(len(a)):     b.append(i)     a.pop()     #a[i]=666#!谨慎当for遍历数组时,修改数组长度和用索引查改数组元素,两者一起使用很可能会出逻辑错误 print(b) print(a) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] # []
 a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] b = [] c = [] #for循环时,前者后后者一起改变的例子 for i in range(len(a)):     a.pop()     i += 80     b.append(i) print(b) print(a) # [80, 81, 82, 83, 84, 85, 86, 87, 88, 89] # []
总结

以上是内存溢出为你收集整理的python的for循环和for each循环遍历时改变变量的结果全部内容,希望文章能够帮你解决python的for循环和for each循环遍历时改变变量的结果所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1185574.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存