今天在做一个简单的python类时发现一个奇怪的问题,无法正常操作list。
以下是代码,主要是写一个类来生成给定数的全排列。
class permutation(object):
def __init__(self,initArray):
self.__permResult = []
if len(initArray) > 1:
self.generatePerm(0,initArray)
else :
self.__permResult = initArray
def generatePerm(self,i,array):
if i < len(array) :
for index in range(i,len(array)):
array[i],array[index] = array[index],array[i]
self.generatePerm(i+1,array)
array[i],array[index] = array[index],array[i]
else :
print(array)
self.__permResult.append(array)
# changing the above line to:
# self.__permResult = self.__permResult + array
# would give me something like [1,2,3,1,3,2,2,1,3,2,3,1,3,1,2,3,2,1]
def printResult(self):
print(self.__permResult)
test = permutation([1,2,3])
test.printResult()
但是很奇怪地得到了如下结果
[1, 2, 3]
[1, 3, 2]
[2, 1, 3]
[2, 3, 1]
[3, 2, 1]
[3, 1, 2]
[[1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3]]
全排列是出来了但却没法(通过append方法)添加到__permResult这个list里面,但以前又没遇到过这种奇怪的情况。
虽然我有感觉这是个很蠢的问题,但看了很久也无法找出错误,只好来segmentfault麻烦大家了。谢谢!
然而如果把append方法的参数改成(array[0:]),则可以正常工作。原来的append(array)则不能,这实在太奇怪了。不知道是bug还是feature