def FindContinuousSequence_optimize(self, tsum):
# write code here
if tsum < 3:
return []
res = []
for i in range(1, int((tsum + 1) / 2)):
print('外层循环i:%d' % i)
sum = 0
temp = []
while sum < tsum:
print('内层循环i:%d' % i)
sum += i
temp.append(i)
i += 1
if sum == tsum:
res.append(temp)
return res
记录一下,在做的时候比较纳闷为什么内部循环时可以在i值基础上进行改变,跳出内部循环i值对外部循环i值也没影响。
由此想到Python的字符串数字是不可变变量,而变量只是给存储的数字字符串等起的“名字”,因此输出了一下i在内外循环的地址,发现,内外循环对应相同的i值地址相同,应证了Python的不可变变量。
不可变(immutable):int、字符串(string)、float、(数值型number)、元组(tuple)
可变(mutable):字典型(dictionary)、列表型(list)
Python函数参数对于可变对象,函数内对参数的改变会影响到原始对象;对于不可变对象,函数内对参数的改变不会影响到原始参数。原因在于:
1、可变对象,参数改变的是可变对象,其内容可以被修改。
2、不可变对象,改变的是函数内变量的指向对象。引自
因此,代码中i值只是当前数值的引用。