### 左神-算法与数据结构全阶班
1. 易混杂操作
本节对一些 Python 易混杂的操作停止比照。
1.1 有放回随机采样和无放回随机采样download
import random
random.choices(seq, k=1) # 长度为k的list,有放回采样
random.sample(seq, k) # 长度为k的list,无放回采样
复制代码
1.2 lambda 函数的参数
func = lambda y: x + y # x的值在函数运转时被绑定
func = lambda y, x=x: x + y # x的值在函数定义时被绑定
复制代码
1.3 copy 和 deepcopy
import copy
y = copy.copy(x) # 只复制最顶层
y = copy.deepcopy(x) # 复制一切嵌套局部
复制代码
复制和变量别名分离在一同时,容易混杂:
a = [1, 2, [3, 4]]
# Alias.
b_alias = a
assert b_alias == a and b_alias is a
# Shallow copy.
b_shallow_copy = a[:]
assert b_shallow_copy == a and b_shallow_copy is not a and b_shallow_copy[2] is a[2]
# Deep copy.
import copy
b_deep_copy = copy.deepcopy(a)
assert b_deep_copy == a and b_deep_copy is not a and b_deep_copy[2] is not a[2]
复制代码
对别名的修正会影响原变量,(浅)复制中的元素是原列表中元素的别名,而深层复制是递归的停止复制,对深层复制的修正不影响原变量。
1.4 == 和 is
x == y # 两援用对象能否有相同值
x is y # 两援用能否指向同一对象
复制代码
1.5 判别类型
type(a) == int # 疏忽面向对象设计中的多态特征
isinstance(a, int) # 思索了