【发布时间】:2019-03-05 21:05:29
【问题描述】:
使用 Python 2.7。
我在一个列表中有四个不同的自定义“飞机”对象,每个对象都有自己独特的属性。
根据我的要求,我需要生成所有可能的飞机订单排列:
# airplaneList = list of 4 airplane objects
airplaneListOrderings = list(itertools.permutations(airplaneList))
对于每个排列,我通过我的程序运行排列列表并在此过程中更改飞机属性,例如:
for permutation in airplaneListOrderings:
for plane in permutation:
if plane.fuel = 0:
plane.state = "landing"
else:
plane.state = "waiting"
问题是,当我完成第一个排列并开始第二个排列时,第二个排列保存了第一个排列的状态。也就是说,在第二个排列中,燃油为0的飞机已经着陆了。
我是在置换对象引用吗?如果是这样,我需要重新排列实际的对象。
如何创建一个排列列表,以便如果我在一个排列中更改对象,它不会更改任何其他排列?
【问题讨论】:
-
这是因为第二个排列中的元素是对象类型,它仍然引用第一个排列中的对象。因此,每次迭代首先复制由新对象组成的对象对
-
“我是在置换对象引用吗?如果是这样,我需要重新排列实际的对象。” python中没有区别。您正在排列对象列表。这些对象永远不会被复制,因此如果您更改一个,这些更改将反映在程序中对该对象的任何引用中
标签: python python-2.7 permutation