Files
ailearning/docs/da/013.md
2020-10-19 21:08:55 +08:00

182 lines
2.0 KiB
Markdown
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 可变和不可变类型
## 列表是可变的Mutable
In [1]:
```py
a = [1,2,3,4]
a
```
Out[1]:
```py
[1, 2, 3, 4]
```
通过索引改变:
In [2]:
```py
a[0] = 100
a
```
Out[2]:
```py
[100, 2, 3, 4]
```
通过方法改变:
In [3]:
```py
a.insert(3, 200)
a
```
Out[3]:
```py
[100, 2, 3, 200, 4]
```
In [4]:
```py
a.sort()
a
```
Out[4]:
```py
[2, 3, 4, 100, 200]
```
## 字符串是不可变的Immutable
In [5]:
```py
s = "hello world"
s
```
Out[5]:
```py
'hello world'
```
通过索引改变会报错:
In [6]:
```py
s[0] = 'z'
```
```py
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-6-83b06971f05e> in <module>()
----> 1 s[0] = 'z'
TypeError: 'str' object does not support item assignment
```
字符串方法只是返回一个新字符串,并不改变原来的值:
In [7]:
```py
print s.replace('world', 'Mars')
print s
```
```py
hello Mars
hello world
```
如果想改变字符串的值,可以用重新赋值的方法:
In [8]:
```py
s = "hello world"
s = s.replace('world', 'Mars')
print s
```
```py
hello Mars
```
或者用 `bytearray` 代替字符串:
In [9]:
```py
s = bytearray('abcde')
s[1:3] = '12'
s
```
Out[9]:
```py
bytearray(b'a12de')
```
数据类型分类:
| 可变数据类型 | 不可变数据类型 |
| --- | --- |
| `list`, `dictionary`, `set`, `numpy array`, `user defined objects` | `integer`, `float`, `long`, `complex`, `string`, `tuple`, `frozenset` |
## 字符串不可变的原因
其一,列表可以通过以下的方法改变,而字符串不支持这样的变化。
In [10]:
```py
a = [1, 2, 3, 4]
b = a
```
此时, `a``b` 指向同一块区域,改变 `b` 的值, `a` 也会同时改变:
In [11]:
```py
b[0] = 100
a
```
Out[11]:
```py
[100, 2, 3, 4]
```
其二是字符串与整数浮点数一样被认为是基本类型而基本类型在Python中是不可变的。