Python deque append重复问题:存入4个Point实际输出8个如何解决
问题原因
- 代码中
Data类的Points属于类属性,Python中类属性是该类所有实例共享的公共变量,所以item1.Points和item2.Points实际指向同一个列表对象。 - 给
item1.Points添加2个元素后再给item2.Points添加2个元素,最终这个共享列表里一共有4个Point对象,遍历2个Data实例时,每个实例的Points列表都会遍历全部4个元素,最终输出8条结果。
解决方案
将Points调整为Data的实例属性,在每个实例初始化时单独创建列表,保证每个Data实例都拥有独立的Points存储。
修正后代码
from collections import deque class Data: # 改为实例属性,每个实例初始化时创建独立的Points列表 def __init__(self): self.Points = list() class Point: Tag = "" queue = deque() item1 = Data() item2 = Data() point1 = Point() point2 = Point() point3 = Point() point4 = Point() point1.Tag = "point1" point2.Tag = "point2" point3.Tag = "point3" point4.Tag = "point4" item1.Points.append(point1) item1.Points.append(point2) item2.Points.append(point3) item2.Points.append(point4) queue.append(item1) queue.append(item2) for it in queue: for p in it.Points: print(p.Tag)
运行后输出:
point1 point2 point3 point4
符合预期结果。
内容的提问来源于stack exchange,提问作者Bharath S R
相关产品推荐
相关产品推荐

