假设有一个文件sort.py:
def bubbleSort_asc(arr):
for i in range(1, len(arr)):
for j in range(0, len(arr)-i):
if arr[j] > arr[j+1]:
arr[j], arr[j + 1] = arr[j + 1], arr[j]
# print(arr)
return arr
def bubbleSort_des(arr):
for i in range(1, len(arr)):
for j in range(0, len(arr)-i):
if arr[j] > arr[j+1]:
arr[j], arr[j + 1] = arr[j + 1], arr[j]
arr.reverse()
# print(arr)
return arr
在另一个文件里进行单元测试:
from sort import bubbleSort_asc,bubbleSort_des
if __name__ == '__main__':
arr = [5,2,3,7,9]
asc_sorted_arr = [2,3,5,7,9]
des_sorted_arr = [9,7,5,3,2]
a = bubbleSort_asc(arr)
b = bubbleSort_des(arr)
print(a)
print(b)
print(id(a),id(b),id(arr))
assert bubbleSort_des(arr) == des_sorted_arr
assert bubbleSort_asc(arr) == asc_sorted_arr
assert b == des_sorted_arr
assert a == asc_sorted_arr
结果如下:
[9, 7, 5, 3, 2]
[9, 7, 5, 3, 2]
4797941872 4797941872 4797941872
AssertionError : assert b == des_sorted_arr
即函数bubbleSort_asc或者bubbleSort_des返回的结果,是一个地址。赋值给外面的变量的时候,那个变量相当于是个指针。就会指向这个地址。相当于一开始的那个变量arr已经发生了改变。这和python的语言特性是分不开的。