1 数据类型
1.1 整数
1.2 浮点数
1.3 字符串
1.4 布尔值
1.5 空值None
1.6 列表list
1.7 元组tuple
1.8 字典dict
1.9 集合set
2 变量
3 不可变对象
4 常量

# 1 数据类型

## 1.1 整数

Python可以处理任意大小的整数，例如：1，100，-80，0，等等。

## 1.4 布尔值

``````>>> 3 > 2
True
>>> 3 > 5
False
``````

and运算是与运算，只有所有都为True，and运算结果才是True：

``````>>> True and False
False
>>> 3 > 2 and 10 > 9
True
``````

or运算是或运算，只要其中有一个为True，or运算结果就是True：

``````>>> True or False
True
>>> False or False
False
``````

not运算是非运算，它是一个单目运算符，把True变成False，False变成True：

``````>>> not True
False
>>> not False
True
>>> not 5 > 2
False
``````

``````if age >= 18:
else:
print('teenager')
``````

## 1.6 列表list

Python内置的一种数据类型是列表：list。list是一种有序的集合，可以随时添加和删除其中的元素。

``````>>> classmates = ['Michael', 'Bob', 'Tracy']
>>> classmates
['Michael', 'Bob', 'Tracy']
``````

``````>>> len(classmates)
3
``````

``````>>> classmates[0]
'Michael'
>>> classmates[3]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list index out of range
``````

``````>>> classmates[-1]
'Tracy'
``````

``````>>> classmates[-2]
'Bob'
>>> classmates[-3]
'Michael'
>>> classmates[-4]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list index out of range
``````

list是一个可变的有序表，所以，可以往list中追加元素到末尾：

``````>>> classmates.append('Adam')
>>> classmates
``````

``````>>> classmates.insert(1, 'Jack')
>>> classmates
``````

``````>>> classmates.pop()
>>> classmates
['Michael', 'Jack', 'Bob', 'Tracy']
``````

``````>>> classmates.pop(1)
'Jack'
>>> classmates
['Michael', 'Bob', 'Tracy']
``````

``````>>> classmates[1] = 'Sarah'
>>> classmates
['Michael', 'Sarah', 'Tracy']
``````

list里面的元素的数据类型也可以不同，比如：

``````>>> L = ['Apple', 123, True]
``````

list元素也可以是另一个list，比如：

``````>>> s = ['python', 'java', ['asp', 'php'], 'scheme']
>>> len(s)
4
``````

``````>>> p = ['asp', 'php']
>>> s = ['python', 'java', p, 'scheme']
``````

``````>>> L = []
>>> len(L)
0
``````

## 1.7 元组tuple

``````>>> classmates = ('Michael', 'Bob', 'Tracy')
``````

tuple的陷阱：当你定义一个tuple时，在定义的时候，tuple的元素就必须被确定下来，比如：

``````>>> t = (1, 2)
>>> t
(1, 2)
``````

``````>>> t = ()
>>> t
()
``````

``````>>> t = (1)
>>> t
1
``````

``````>>> t = (1,)
>>> t
(1,)
``````

Python在显示只有1个元素的tuple时，也会加一个逗号,，以免你误解成数学计算意义上的括号。

``````>>> t = ('a', 'b', ['A', 'B'])
>>> t[2][0] = 'X'
>>> t[2][1] = 'Y'
>>> t
('a', 'b', ['X', 'Y'])
``````

## 1.8 字典dict

Python内置了字典：dict的支持，dict全称dictionary，在其他语言中也称为map，使用键-值（key-value）存储，具有极快的查找速度。

``````>>> names = ['Michael', 'Bob', 'Tracy']
>>> scores = [95, 75, 85]
``````

``````>>> d = {'Michael': 95, 'Bob': 75, 'Tracy': 85}
>>> d['Michael']
95
``````

dict就是第二种实现方式，给定一个名字，比如'Michael'，dict在内部就可以直接计算出Michael对应的存放成绩的“页码”，也就是95这个数字存放的内存地址，直接取出来，所以速度非常快。

``````>>> d['Adam'] = 67
67
``````

``````>>> d['Jack'] = 90
>>> d['Jack']
90
>>> d['Jack'] = 88
>>> d['Jack']
88
``````

``````>>> d['Thomas']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'Thomas'
``````

``````>>> 'Thomas' in d
False
``````

``````>>> d.get('Thomas')
>>> d.get('Thomas', -1)
-1
``````

``````>>> d.pop('Bob')
75
>>> d
{'Michael': 95, 'Tracy': 85}
``````

• 查找和插入的速度极快，不会随着key的增加而变慢；
• 需要占用大量的内存，内存浪费多。

• 查找和插入的时间随着元素的增加而增加；
• 占用空间小，浪费内存很少。

dict可用在需要高速查找的很多地方，正确使用dict需要牢记的第一条就是dict的key必须是不可变对象。

## 1.9 集合set

set和dict类似，也是一组key的集合，但不存储value。由于key不能重复，所以，在set中，没有重复的key。

``````>>> s = set([1, 2, 3])
>>> s
{1, 2, 3}
``````

``````>>> s = set([1, 1, 2, 2, 3, 3])
>>> s
{1, 2, 3}
``````

``````>>> s.add(4)
>>> s
{1, 2, 3, 4}
>>> s
{1, 2, 3, 4}
``````

``````>>> s.remove(4)
>>> s
{1, 2, 3}
``````

set可以看成数学意义上的无序和无重复元素的集合，因此，两个set可以做数学意义上的交集、并集等操作：

``````>>> s1 = set([1, 2, 3])
>>> s2 = set([2, 3, 4])
>>> s1 & s2
{2, 3}
>>> s1 | s2
{1, 2, 3, 4}
``````

set和dict的唯一区别仅在于没有存储对应的value，但是，set的原理和dict一样，所以，同样不可以放入可变对象，因为无法判断两个可变对象是否相等，也就无法保证set内部“不会有重复元素”。

# 2 变量

• 在内存中创建了一个'ABC'的字符串。
• 在内存中创建了一个名为a的变量，并把它指向'ABC'。

``````a = 'ABC'
b = a
a = 'XYZ'
print(b)
``````

• 列表list
• 字典dict

• 数值类型int，long，bool，float
• 字符串str
• 元组tuple

# 3 不可变对象

``````>>> a = ['c', 'b', 'a']
>>> a.sort()
>>> a
['a', 'b', 'c']
``````

``````>>> a = 'abc'
>>> a.replace('a', 'A')
'Abc'
>>> a
'abc'
``````

``````>>> a = 'abc'
>>> b = a.replace('a', 'A')
>>> b
'Abc'
>>> a
'abc'
``````

# 4 常量

``````>>> 10 / 3
3.3333333333333335
``````

/除法计算结果是浮点数，即使是两个整数恰好整除，结果也是浮点数：

``````>>> 9 / 3
3.0
``````

``````>>> 10 // 3
3
``````

``````>>> 10 % 3
1
``````

# 小结

Python支持多种数据类型，在计算机内部，可以把任何数据都看成一个“对象”，而变量就是在程序中用来指向这些数据对象的，对变量赋值就是把数据和变量给关联起来。

Python的浮点数也没有大小限制，但是超出一定范围就直接表示为inf（无限大）。

### 推荐阅读更多精彩内容

• 一、python 变量和数据类型 1.整数 Python可以处理任意大小的整数，当然包括负整数，在Python程序...
绩重KF阅读 1,198评论 0 1
• 最近在慕课网学习廖雪峰老师的Python进阶课程，做笔记总结一下重点。 基本变量及其类型 变量 在Python中，...
victorsungo阅读 1,359评论 0 5
• 本教程基于Python 3，参考 A Byte of Python v1.92(for Python 3.0) 以...
yuhuan121阅读 2,370评论 1 6
• http://python.jobbole.com/85231/ 关于专业技能写完项目接着写写一名3年工作经验的J...
燕京教育博士阅读 7,245评论 1 118
• Python 是一种相当高级的语言，通过 Python 解释器把符合语法的程序代码转换成 CPU 能够执行的机器码...
Python程序媛阅读 1,753评论 0 3