Python中用while循环处理list产生了一个奇怪的问题?

因为在内存中,你的运行结果会是这样的(为了容易理解损失了一部分不影响结果的准确性):Python中用while循环处理list产生了一个奇怪的问题?

为了实现你的预期效果,你可以这样:num_pos = for x in xrange(1, 19)]如果你非要按照自己的写法,可以这样:num_pos = n = 0while n \u0026lt; 18: a = num_pos.append(a) n += 1print(num_pos)所有命名均参考题主的代码,不代表我的命名规范。
■网友
其实可以两行代码搞定你要的结果
■网友
画个示意图,你的程序的执行结果是这样的, 【Python中用while循环处理list产生了一个奇怪的问题?】 Python中用while循环处理list产生了一个奇怪的问题?

你的实际想要的是这样的Python中用while循环处理list产生了一个奇怪的问题?

所以应该这样写import copya = n = 0num_pos = while n \u0026lt; 18: temp = copy.copy(num_pos) #copy contents in a, not just use the identical pointer a temp = temp + 1 num_pos.append(temp) n += 1print(num_pos)或者这样写a = n = 0num_pos = while n \u0026lt; 18: temp = list(num_pos) # same as copy.copy temp += 1 num_pos.append(temp) n += 1print(num_pos)
■网友
a在内存中的位置是不变的,题主的num_pos中最终存放的列表是18个a,它们的值都指向同一块内存,所以值都是一样的。上面那些回答示意图已经标的很清楚了,我就不画了
■网友
题主可以把num_pos.append(a)改为num_pos.append(a)每次循环的时候把a当前值的拷贝添加进num_pos


    推荐阅读