Python列表嵌套追加异常:为何最终得到[[], []]而非预期结果?
Python列表引用问题分析及解决
你的问题核心在于Python中列表是可变对象,当你执行list2.append(list1)时,并没有把list1的内容复制一份添加到list2里,而是把list1这个对象的引用(相当于指向它的指针)加进了list2。
循环里每次最后调用list1.clear(),都是在清空同一个列表对象,而list2里的两个元素都是指向这个对象的引用,所以最后输出时,这个对象已经被清空,list2自然就变成了[[], []]。
两种解决方法:
- 每次循环新建列表对象
把list1的定义放到循环内部,让每次循环都创建一个全新的列表,这样添加到list2的就是不同的对象:
list2 = [] for _ in range(int(input())): list1 = [] name = input() score = float(input()) list1.append(name) list1.append(score) list2.append(list1) print(list2)
- 添加列表的副本到list2
在append时,添加list1的副本而不是原对象的引用,这样后续清空原list1不会影响已经添加到list2的内容:
list1 = [] list2 = [] for _ in range(int(input())): name = input() score = float(input()) list1.append(name) list1.append(score) list2.append(list1.copy()) # 或者用list1[:]来生成副本 list1.clear() print(list2)
内容的提问来源于stack exchange,提问作者FireFly2000
相关产品推荐
相关产品推荐

