list 和 tuple 最大的区别就是:前者是可变对象、后者是不可变对象
以及可变、不可变带来的内存区别:list 为了扩容,会多申请一些内存,所以 list 的内存使用也会比 tuple 多。(tuple 是用多少申请多少)
除了上面人尽皆知的区别,还有一个区别:typing hint
现在写 python 代码如果还不加 typing hint 的话,就太过分了!
先说结论
如果元素的 type 都是一样的,就用 list
如果元素的 type 是不一样的,就用 tuple
举一个例子:
def handle(user_id: int) -> tuple[bool, str]:
if user_id == 0:
return False, '没有这个用户'
else:
return True, '有这个用户'
exist, message = handle(0)
比如上面的函数,返回第一个元素是 bool 类型,第二个元素是字符串类型,这种情况,用元组就能很好的描述
返回的元组要是定长,不能一个条件里面返回的 len 是 2,另一个条件返回的是 len 是 3
把光标放在 exist 上,ide 就能智能提示告诉你,类型是 bool
把光标放在 message 上,ide 就能智能提示告诉你,类型是 str
如果用 list,能不能做到这件事情?不能
来看看如果使用 list 会是什么结果
def handle(user_id: int) -> list[bool, str]:
if user_id == 0:
return False, '没有这个用户'
else:
return True, '有这个用户'
exist, message = handle(0)
如果我们把返回类型从 tuple[bool, str]
改成 list[bool, str]
此时 exist 的提示还是 bool 类型
但是 message 就出问题了,message 应该是 str 类型,但是 ide 给的提示是 bool 类型
换种写法,把 list[bool, str]
改成 list[bool | str]
会如何?
def handle(user_id: int) -> list[bool | str]:
if user_id == 0:
return False, '没有这个用户'
else:
return True, '有这个用户'
exist, message = handle(0)
结果当然是更不行
不管是 exist 还是 message 都变成 bool | str
了
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。