【python】容器嵌套合法性检查

一、底层实现

列表的底层实现:链表结构,动态,栈或队列但不是链表。速度快,内存浪费多,占空间多。

元组的底层实现:链表结构,静态。

集合的底层实现:哈希表。带空值。

字典的底层实现:哈希表(关联表、散列表),通过哈希函数将数据映射到指定内存空间。速度慢,内存浪费少,占空间少。与列表比是空间换时间。

二、容器属性

列表的属性:有序,可变,可重复,元素类型可多种

元组的属性:有序,不可变,可重复,元素类型可多种(当元组内嵌套可变类型时,改变的是引用而不是对象本身因此不可变,当然语法还是不合法的)

集合的属性:无序,可变,不可重复,元素类型可多种(set集合可变,frozenset集合不可变)

字典的属性:无序,可变,可重复,元素类型可多种(键必须是可哈希但不可变的串、数、元组)。

数组的属性:有序,可变,可重复,元素类型不可多种(原生python无数组)

其他集合类型:namedtuple:元组子类工厂函数。deque双端队列。counter字典子类可哈希对象计数器。chainmap字典类。ordereddict字典子类可保存添加顺序。defaultdict可设缺失值的字典子类。

三、代码

x='a'
y=1
z='我'
#列表嵌套列表
a=[x,[y,z]]
#列表嵌套元组
b=[x,(y,z,)]
#列表嵌套集合
c=[x,{y,z}]
#列表嵌套字典
d=[x,{y:z}]

#元组嵌套列表
e=(x,[y,z],)
#元组嵌套元组
f=(x,(y,z,),)
#元组嵌套集合
g=(x,{y,z},)
#元组嵌套字典
h=(x,{y:z})

#集合嵌套列表,报错:TypeError: unhashable type: 'list'
#i={x,[y,z]}
#集合嵌套元组
j={x,(y,z,)}
#集合嵌套集合,报错:TypeError: unhashable type: 'set'
#k={x,{y,z}}
#集合嵌套字典,报错:TypeError: unhashable type: 'dict'
#l={x,{y:z}}

#字典嵌套列表,报错:TypeError: unhashable type: 'list'
#m={[x]:[y,z]}
#字典嵌套元组
n={x:(y,z,)}
#字典嵌套集合,报错:TypeError: unhashable type: 'set'
#o={{x}:{y,z}}
#字典嵌套字典,报错:TypeError: unhashable type: 'dict'
#p={{x:y}:{y:z}}

print(type(x))
print(type(y))
print(type(z))

print(type(a))
print(type(b))
print(type(c))
print(type(d))
print(type(e))
print(type(f))
print(type(g))
print(type(h))
#print(type(i))
print(type(j))
#print(type(k))
#print(type(l))
#print(type(m))
print(type(n))
#print(type(o))
#print(type(p))

你可能感兴趣的:(python,python)