在Python中,值是靠引用来传递来的。
# 用 id() 来判断两个变量是否为同一个值的引用 # 我们可以将 id 值理解为那块的内存地址 """ 1. 如果两个变量的值一样,则两个变量的内存地址一样,变量 a 和 变量 b 引用的是同一个 10 """ a = 10 b = a print(id(a)) # 2576104778320 print(id(b)) # 2576104778320 """ 2. 如果两个变量的值不一样,则两个变量的内存地址不一样 """ n1 = 20 n2 = 30 print(id(20)) # 1588465396624 print(id(30)) # 1588465396944 """ 3. int类型的值是不可变的 """ m1 = 1 m2 = m1 m1 = 2 print(id(m1)) # 2966472517968 print(id(m2)) # 2966472517936 """ 4. 列表是可变的 """ a = [10,20,30] b = a print(id(a)) # 1804906729216 print(id(b)) # 1804906729216 print('-----修改列表 a 之后---------') a.append(100) print(id(a)) # 1804906729216 print(id(b)) # 1804906729216
""" 1. 调用 f1 函数时,传递了实参 n, 相当于 a = n,此时变量 a 和 n 引用同一个内存地址 2. 在函数内,通过 a += a, 改变了变量 a 的 值, 所以变量 a 和 n 是不同的内存地址 """ def f1(a): print(a) # 100 print(id(a)) # 2255722403280 a += a # 200 print(id(a)) # 2255722406544 n = 100 f1(n) """ 传列表实参,引用的内存地址是一样的,因为列表是可变的 """ def f1(a): print(a) # ['a','b'] print(id(a)) # 2553637375744 a += a # ['a','b','a','b'] print(id(a)) # 2553637375744 n = ['a','b'] f1(n)
""" 学递归前 计算 10 以内整数的累加的和 """ result = 0 for i in range(1,11): result += i print(result) # 55 """ 学递归后 计算 10 以内整数的和 """ def my_sum(n): if n == 1: return n return n + my_sum(n-1) print(my_sum(10)) # 55
def f1(list1): list2 = [] for i in list1: # isinstance(变量名,类型) 函数, 判断某个变量是否是某个数据类型 if isinstance(i,list): list2.extend(f1(i)) else: list2.append(i) return list2 l1 = [10, 'b', 'c', ['d', 50, ['e', 70, [80, 'f']]], ['g', 100]] res = f1(l1) print(res) # [10, 'b', 'c', 'd', 50, 'e', 70, 80, 'f', 'g', 100]