本人python初学者。这几行代码,本意是想在12个[1]里各加一个9,为什么运行出来都是加12个9,代码哪里出了问题,看两天看不出来,求解答
好神奇啊,这是为啥,,,,等我明天来解答
循环代码里加一句:break
代码如下:
context=[]
config=[1]
for i in range(12):
context.append(config)
print(context)
for i in range(12):
context[i].append(9)
break
输出结果:
[[1], [1], [1], [1], [1], [1], [1], [1], [1], [1], [1], [1]]
[[1, 9], [1, 9], [1, 9], [1, 9], [1, 9], [1, 9], [1, 9], [1, 9], [1, 9], [1, 9], [1, 9], [1, 9]]
你的第二个循环目前就是循环给i这个元素加9,且循环12次。加个break可以在加一个9就强制立马退出。
但本质是循环体设置的问题。建议修改循环体,否则容易出现数组下标越界问题。
context=[]
config=[1]
for i in range(12):
context.append(config)
print(context)
for j in context:
j.append(9)
break
print(context)
[[1], [1], [1], [1], [1], [1], [1], [1], [1], [1], [1], [1]]
[[1, 9], [1, 9], [1, 9], [1, 9], [1, 9], [1, 9], [1, 9], [1, 9], [1, 9], [1, 9], [1, 9], [1, 9]]
请按任意键继续. . .
如果是仅仅加上9,可以不使用两个循环
context = []
config = [1]
p = 0
for i in range(12):
context.append([1])
context[i].append(9)
print(context)
append(config)这里出问题了
因为config是个list,它是可变值类型
当你在循环里添加它的时候,你添加的都是同一个对象
当你在给config添加9的时候,所有的也都变了
你想彻底解决这个问题以及衍生的各种问题,不是加break,那属于自欺欺人
你应该把config=[1]放到循环里面来执行,让每个都不一样
context里面引用了config,问题的原因是深浅拷贝,导致9加了12次