import copy def perm(n): #注意每轮全排列会丢弃上一轮的全排列 data=[] if n==1: data.append([1]) else: #m为n-1层data数据中的一项,存储了n-1位的全排列(上一轮) for m in perm(n-1): for j in range(len(m)+1): #此处浅拷贝深拷贝或list()还有[:]都可以,仅仅是为了让m不受添加新数字的影响 k=copy.copy(m) k.insert(j,n) data.append(k) return data print(perm(3))