Python中传递/修改可变对象时,是会影响到原变量的(数组、列表),不可变对象的原始对象不会被修改(数字、字符或者元祖)。
以下两个函数结果不一样:
def combine(self, n, k):
ans = []
stack = []
x = 1
while True:
l = len(stack)
if l == k:
ans.append(stack)
if l == k or x > n - k + l + 1:
if not stack:
return ans
x = stack.pop() + 1
else:
stack.append(x)
x += 1
def combine(self, n, k):
ans = []
stack = []
x = 1
while True:
l = len(stack)
if l == k:
ans.append(stack[:])
if l == k or x > n - k + l + 1:
if not stack:
return ans
x = stack.pop() + 1
else:
stack.append(x)
x += 1
第一个的结果是[[], [], [], []],第二个为正常的结果。
所以遇到这种需要保存list的某一时刻值时,可以用list[:]截取,这样放进别的数据结构保存的值不会再随着list改变而变化了。