isinstance(obj, list)是最直接可靠的方式,因iter()或for循环无法区分list、tuple、str等可迭代对象,而type(obj)==list会拒绝list子类;需用list特有方法、序列化校验或防字符串误用时必须严格判断。

用 isinstance(obj, list) 是最直接可靠的方式。
为什么不能只靠 iter() 或 for 循环判断?
因为 list、tuple、str、set、dict、生成器、自定义类(只要实现了 __iter__)都是可迭代对象。仅测试“能否遍历”无法区分它们。
为什么不用 type(obj) == list?
它会拒绝继承自 list 的子类实例,而这类对象行为上仍是真正的 list。例如:
class MyList(list): pass
ml = MyList([1, 2])
type(ml) == list # False
isinstance(ml, list) # True
做过Flash动画的Flash爱好者们都知道,要做好一个Flash动画,AS是必不可少的,即使只是很简单的几句代码也能起到整个Flash画龙点睛的作用。 虽然AS不是真正的面向对象的编程,但是它也有对象的概念。这个概念贯穿整个AS的始终,所以,对对象的理解,比对语法或者其他的理解更为重要。感兴趣的朋友可以过来看看
哪些情况需要严格判断是否为 list?
- 要使用
.append()、.extend()、.insert()等特有方法前做类型防护 - 序列化或 API 输入校验时,明确要求必须是 list(而非 tuple 或 deque)
- 避免把字符串误当列表处理(
"abc"可迭代,但通常不是你想要的“列表”)
补充:如果还需兼容常见序列类型(如 tuple、str),可用 collections.abc.Sequence
但注意:str 和 bytes 也是 Sequence,而 set、dict 不是。若目标是“有序、支持索引、可重复”的容器,这个抽象基类比单纯检查 list 更灵活。
from collections.abc import Sequence—— 这能覆盖 list/tuple/range/bytearray 等,排除字符串干扰。
isinstance(obj, Sequence) and not isinstance(obj, (str, bytes))









