集合的元素可以是不可变对象:数字、字符串、元祖、frozenset。集合里的元素是不重复的。
空集合:
>>> dora = set()
>>> type(dora)
<class 'set'>
Python 2.x 里现实方式是set(列表)方式。
>>> dora
set([])
Python 3.x 里,空的时候是set(),有元素跟字典差不多,但不是键:值方式。
>>> dora
set()
>>> dora = {'Emon'}
>>> dora
{'Emon'}
在Python2.x里默认字符串可以认为是在python3.x里的byte类型,在python3.x里默认类型是unicode。字符串类型是不可变的,但在python3.x里支持可变字符串:bytearray类型。
>>> a = bytearray('你好',encoding='utf-8')
bytearray(b'\xe5\xbd\xa0\xe5\xa5\xbd')
>>> a[0]
228
>>> a[0]=229
>>> a.decode('utf-8')
'彠好'
>>> a.find('好'.encode('utf-8'))
3
像列表,字典,元祖里的元素可以包涵任何对象,可以任意嵌套。列表和字典是任意变长的。 比如:一个列表如下:
>>> List1
[{'dict': ['dict1', 'dict2']}, 'List2', (['list3-1', 'list3-2'], 'list3-3'), ['list4']]
>>> a = [1,2,3]
>>> b = ['a',a,'b']
>>> b
['a', [1, 2, 3], 'b']
>>> a[0] = 4
>>> a
[4, 2, 3]
>>> b
['a', [4, 2, 3], 'b']
这个时候发现,结果可能与想象的不一样。当我们需要的是复制a的值而不是引用:
>>> a = [1,2,3]
>>> b = ['a',a,'b']
>>> c=['a',a[:],'b']
>>> a[0] = 4
>>> a
[4, 2, 3]
>>> b
['a', [4, 2, 3], 'b']
>>> c
['a', [1, 2, 3], 'b']
具体原理图如下:
>>> a = 1
>>> b = 1
>>> a == b
True
>>> a is b
True
>>> a = [1,2,3]
>>> b = [1,2,3]
>>> a == b
True
>>> a is b
False
创建列表,字典,元组等有多个元素的对象的时候,不会在原有对象里查找想等的,而是新创建一个,字符串有点特殊。
数字:非0为真,0为假
其它对象:非空为真,空为假
None 为假,关于None,在Python里是独立的对象类型,只有一个值。
bool类型:
>>> bool()
False
>>> bool(1)
True
>>> bool({})
False
>>> a = {'d':''} #字典
>>> a['d'] = a
>>> a
{'d': {...}}
>>> a['d']['d']['d']
{'d': {...}}
>>> l = ['L'] #列表
>>> l.append(l)
>>> l
['L', [...]]
>>> l[1][1][1]
['L', [...]]