为变量添加类型提示:
- 选择变量类型
- alt + enter
可变类型和不可变类型以及地址问题:
new_array = [''] * 10
new_array1 = [None] * 10
print(id(new_array), new_array)
print(id(new_array1), new_array1)
new_array2 = new_array1
print(id(new_array2), new_array2)
new_array2.append(555)
print(id(new_array1), new_array1)
new_array2 = new_array2 + [1, 2, 3]
print(id(new_array2), new_array2)
print(id(new_array1), new_array1)
执行结果
3001367345600 ['', '', '', '', '', '', '', '', '', '']
3001367691968 [None, None, None, None, None, None, None, None, None, None]
3001367691968 [None, None, None, None, None, None, None, None, None, None]
3001367691968 [None, None, None, None, None, None, None, None, None, None, 555]
3001367694528 [None, None, None, None, None, None, None, None, None, None, 555, 1, 2, 3]
3001367691968 [None, None, None, None, None, None, None, None, None, None, 555]
可以看到,当执行
可变类型 = 可变类型
的时候,是写时复制的原理:地址相同,append之后相同,但是
如果使用 + 则会产生新的地址
归并排序
python写归并排序存在一个申请太多的辅助空间的问题,要注意避免
merge_deal(left, right):
pass
merge_sort(left, right):
merge_sort(left, (left + right) // 2)
merge_sort((left + right) // 2 + 1, right)
merge_deal(left, right)