Python中set()的类型是什么?

Tom*_*Tom 1 python types set python-2.7

a = ['a', 'b', 'c', 'd']
b = set(a)
print isinstance(a, types.ListType)
print isinstance(b, types.ListType)
Run Code Online (Sandbox Code Playgroud)

结果显示b不是types.ListType.但是,Python中没有"SetType".那么什么是'XXXType'类型,以便isinstance(b,types.XXXType)为True?

Mar*_*ers 9

使用isinstance(b, set).

types对内置类型的引用只是为了方便*而被弃用(它们已从模块Python 3.x版本中types删除).因此set从未添加过.

例如,types.ListType它只是一个别名list:

>>> import types
>>> types.ListType is list
True
>>> isinstance([1, 2, 3], list)
True
Run Code Online (Sandbox Code Playgroud)

如果您必须SetTypetypes模块中有引用,只需自己添加别名:

types.SetType = set
Run Code Online (Sandbox Code Playgroud)

如果要查找基本容器类型的抽象基类,请使用collections模块ABC ; 这些信号是什么方法,一种支持和核对这些类型可以让你检测到更广泛的类型,支持特定的操作(而不是仅仅是个实例listset类型):

>>> from collections import Set, MutableSequence
>>> isinstance([1, 2, 3], MutableSequence)
True
>>> isinstance({1, 2, 3}, Set)
True
Run Code Online (Sandbox Code Playgroud)

* 历史教训:曾几何时,内置的类型,如intlist没有想像中的类,并且内置的名字int()list()人简单的功能,以转换为内置类型.这意味着名称根本就不是同一个对象types.IntType,types.ListType并且您必须使用该types模块才能isinstance()在列表对象上使用.那段时间现在已经很久了,远远落后于我们,而且types模块的作用也发生了变化.