可变与不可变数据

文章发布时间:

最后更新时间:

文章总字数:
353

预计阅读时间:
1 分钟

一.两者区别

  • 可变类型修改内容时,不会改变地址;

  • 不可变类型改值时,Python会创建一个新的对象,地址改变。

1
2
3
4
5
6
7
8
9
10
11
# 可变类型
a = [1,2,3]
print(id(a))
a.append(4)
print(id(a))

#不可变类型
a = 1
print(id(a))
a = a + 1
print(id(a))
2711527596416
2711527596416
140732630124984
140732630125016

二.判断数据类型

1
2
3
4
5
6
7
#判断是否属于指定类型
a = 1
print(isinstance(a, dict))

#判断是否属于多个类型之一
str1 = 'abc'
print(isinstance(str1, (int, str)))
False
True

注:还有一个特别的判断

1
2
3
4
5
6
# 判断空值
a = None
print(isinstance(a, NoneType))

a = None
print(isinstance(a, None))
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
Cell In[97], line 3
    1 # 判断空值
    2 a = None
----> 3 print(isinstance(a, NoneType))
    5 a = None
    6 print(isinstance(a, None))

NameError: name 'NoneType' is not defined

这里写一起因为两个测试之后其实是都不行的,需要注意。

三.类型转换API

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 将数字转化为对应字符
a = 97
b = chr(a)
print(b)

# 将字符转化为数字
a = 'A'
b = ord(a)
print(b)

# 用Python表达式运行并返回结果
a = eval('2+3*4')
print(a)

# 这里常常和.join()结合使用
a = ["1","2"]
b = "+".join(a)
print(b)
print(eval(b))
a
65
14
1+2
3

各种数据类型的转换就不赘述了,去找每个数据的创键过程复习。还有就是,像字符串转整数是会报错的,需要注意。