【问题标题】:Object list permutations are not independent from one another in python对象列表排列在python中不是相互独立的
【发布时间】: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


【解决方案1】:

您可以创建对象的副本

airplaneListOrderingsnew =[]
import copy
for objects in airplaneListOrderings:
    airplaneListOrderingsnew.append(map(copy.copy,objects))

【讨论】:

  • 这可以推广到任意数量的对象吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-10-28
  • 1970-01-01
  • 1970-01-01
  • 2022-07-06
  • 1970-01-01
  • 1970-01-01
  • 2012-02-25
相关资源
最近更新 更多