# Python 数据类型

> 原文： [https://www.programiz.com/python-programming/variables-datatypes](https://www.programiz.com/python-programming/variables-datatypes)

#### 在本教程中，您将学习可在 Python 中使用的不同数据类型。

## Python 中的数据类型

Python 中的每个值都有一个数据类型。 由于在 Python 编程中一切都是对象，因此数据类型实际上是类，而变量是这些类的实例（对象）。

Python 中有多种数据类型。 下面列出了一些重要的类型。

* * *

## Python 数字

整数，浮点数和复数属于 [Python 数字](https://www.programiz.com/python-programming/numbers)类别。 在 Python 中，它们被定义为`int`，`float`和`complex`类。

我们可以使用`type()`函数来了解变量或值属于哪个类。 同样，`isinstance()`函数用于检查对象是否属于特定类。

```py
a = 5
print(a, "is of type", type(a))

a = 2.0
print(a, "is of type", type(a))

a = 1+2j
print(a, "is complex number?", isinstance(1+2j,complex)) 
```

**输出**

```py
5 is of type <class 'int'>
2.0 is of type <class 'float'>
(1+2j) is complex number? True 
```

整数可以是任意长度，仅受可用内存的限制。

浮点数最多可精确到 15 个小数位。 整数和浮点由小数点分隔。 1 是整数， 1.0 是浮点数。

复数以`x + yj`的形式编写，其中`x`是实数部分，`y`是虚数部分。 这里有些例子。

```py
>>> a = 1234567890123456789
>>> a
1234567890123456789
>>> b = 0.1234567890123456789
>>> b
0.12345678901234568
>>> c = 1+2j
>>> c
(1+2j) 
```

请注意，`float`变量`b`被截断了。

* * *

## Python 列表

[列表](https://www.programiz.com/python-programming/list)是项目的有序序列。 它是 Python 中最常用的数据类型之一，非常灵活。 列表中的所有项目都不必是同一类型。

声明列表非常简单。 用逗号分隔的项目括在方括号`[ ]`中。

```py
a = [1, 2.2, 'python'] 
```

我们可以使用切片运算符`[ ]`从列表中提取一个项目或一系列项目。 索引在 Python 中从 0 开始。

```py
a = [5,10,15,20,25,30,35,40]

# a[2] = 15
print("a[2] = ", a[2])

# a[0:3] = [5, 10, 15]
print("a[0:3] = ", a[0:3])

# a[5:] = [30, 35, 40]
print("a[5:] = ", a[5:]) 
```

**输出**：

```py
a[2] =  15
a[0:3] =  [5, 10, 15]
a[5:] =  [30, 35, 40] 
```

列表是可变的，也就是说，列表元素的值可以更改。

```py
a = [1, 2, 3]
a[2] = 4
print(a) 
```

**输出**：

```py
[1, 2, 4] 
```

* * *

## Python 元组

[元组](https://www.programiz.com/python-programming/tuple)是与列表相同的项的有序序列。 唯一的区别是元组是不可变的。 元组一旦创建就无法修改。

元组用于写保护数据，通常比列表快，因为它们不能动态更改。

它在括号`()`中定义，其中各项之间用逗号分隔。

```py
t = (5,'program', 1+3j) 
```

我们可以使用切片运算符`[]`提取项目，但不能更改其值。

```py
t = (5,'program', 1+3j)

# t[1] = 'program'
print("t[1] = ", t[1])

# t[0:3] = (5, 'program', (1+3j))
print("t[0:3] = ", t[0:3])

# Generates error
# Tuples are immutable
t[0] = 10 
```

**输出**：

```py
t[1] =  program
t[0:3] =  (5, 'program', (1+3j))
Traceback (most recent call last):
  File "test.py", line 11, in <module>
    t[0] = 10
TypeError: 'tuple' object does not support item assignment 
```

* * *

## Python 字符串

[字符串](https://www.programiz.com/python-programming/string)是 Unicode 字符序列。 我们可以使用单引号或双引号来表示字符串。 可以使用三引号`'''`或`"""`表示多行字符串。

```py
s = "This is a string"
print(s)
s = '''A multiline
string'''
print(s) 
```

**输出**：

```py
This is a string
A multiline
string 
```

就像列表和元组一样，切片运算符`[ ]`可以与字符串一起使用。 但是，字符串是不可变的。

```py
s = 'Hello world!'

# s[4] = 'o'
print("s[4] = ", s[4])

# s[6:11] = 'world'
print("s[6:11] = ", s[6:11])

# Generates error
# Strings are immutable in Python
s[5] ='d' 
```

**输出**：

```py
s[4] =  o
s[6:11] =  world
Traceback (most recent call last):
  File "<string>", line 11, in <module>
TypeError: 'str' object does not support item assignment 
```

* * *

## Python 集

[集](https://www.programiz.com/python-programming/set)是唯一项的无序集合。 集由用大括号`{ }`内的逗号分隔的值定义。 集合中的项目不排序。

```py
a = {5,2,3,1,4}

# printing set variable
print("a = ", a)

# data type of variable a
print(type(a)) 
```

**输出**：

```py
a =  {1, 2, 3, 4, 5}
<class 'set'> 
```

我们可以在两个集合上执行集合操作，例如联合，相交。 集具有唯一值。 他们消除重复。

```py
a = {1,2,2,3,3,3}
print(a) 
```

**输出**：

```py
{1, 2, 3} 
```

由于集是无序集合，因此索引没有意义。 因此，切片运算符`[]`不起作用。

```py
>>> a = {1,2,3}
>>> a[1]
Traceback (most recent call last):
  File "<string>", line 301, in runcode
  File "<interactive input>", line 1, in <module>
TypeError: 'set' object does not support indexing 
```

* * *

## Python 字典

[字典](https://www.programiz.com/python-programming/dictionary)是键值对的无序集合。

当我们拥有大量数据时，通常使用它。 字典针对检索数据进行了优化。 我们必须知道检索值的密钥。

在 Python 中，字典在花括号`{}`中定义，每一项都是一对，形式为`key:value`。 键和值可以是任何类型。

```py
>>> d = {1:'value','key':2}
>>> type(d)
<class 'dict'> 
```

我们使用键来检索相应的值。 但并非相反。

```py
d = {1:'value','key':2}
print(type(d))

print("d[1] = ", d[1]);

print("d['key'] = ", d['key']);

# Generates error
print("d[2] = ", d[2]); 
```

**输出**：

```py
<class 'dict'>
d[1] =  value
d['key'] =  2
Traceback (most recent call last):
  File "<string>", line 9, in <module>
KeyError: 2 
```

* * *

## 数据类型之间的转换

我们可以使用`int()`，`float()`，`str()`等不同的类型转换函数在不同的数据类型之间进行转换。

```py
>>> float(5)
5.0 
```

从`float`到`int`的转换将截断该值（使其接近零）。

```py
>>> int(10.6)
10
>>> int(-10.6)
-10 
```

字符串之间的转换必须包含兼容的值。

```py
>>> float('2.5')
2.5
>>> str(25)
'25'
>>> int('1p')
Traceback (most recent call last):
  File "<string>", line 301, in runcode
  File "<interactive input>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '1p' 
```

我们甚至可以将一个序列转换为另一序列。

```py
>>> set([1,2,3])
{1, 2, 3}
>>> tuple({5,6,7})
(5, 6, 7)
>>> list('hello')
['h', 'e', 'l', 'l', 'o'] 
```

要转换为字典，每个元素必须成对：

```py
>>> dict([[1,2],[3,4]])
{1: 2, 3: 4}
>>> dict([(3,26),(4,44)])
{3: 26, 4: 44} 
```