【一】可变数据类型
- 对于可变数据类型(如列表,字典等),在函数中修改参数会影响原始对象
【1】字典#
dic = {'name': 'Green', 'sex': 'male', 'age': '22'}
print(id(dic))
dic['name'] = 'hqq'
print(id(dic))
【2】元组#
tuple_1 = ('green', 'hqq', [22, '10k'])
tuple_1[1] = 'tom'
tuple_1.append('good')
- 元组内元素无法修改指的是元组内索引指向的内存地址不能被修改
tuple_1 = ('green', 'hqq', [22, '10k'])
print(tuple_1)
print(id(tuple_1))
tuple_1[2][1] = 11
print(tuple_1)
print(id(tuple_1))
- 如果元组内存在可变类型,修改可变类型后内存地址不变,所以元组也是可变数据类型
【3】列表#
list_1 = ['green', 'hqq', '21']
print(id(list_1))
list_1[1] = 'GG_BOND'
print(list_1)
print(id(list_1))
- 可以看到修改列表内容后列表的内存地址没有发生改变,所以列表也是可变数据类型
【4】集合类型#
my_set = {1, 2, 3}
print(id(my_set))
my_set.add(4)
print(my_set)
print(id(my_set))
【二】不可变数据类型
【1】布尔类型#
is_bool = True
print(is_bool)
print(id(is_bool))
is_bool = False
print(is_bool)
print(id(is_bool))
- 布尔值的内容改变时,内存地址会改变,所以布尔值是不可变数据类型
【2】数字类型#
num = 22
print(id(num))
num = 23
print(id(num))
- 数字改变时,内存地址会改变,所以数字类型也是不可变数据类型
【3】字符串类型#
str_1 = 'My name is green'
print(id(str_1))
str_1 = 'My name is hqq'
print(id(str_1))
- 当字符串发生改变时,其内存地址也会改变,所以字符串是一个不可变数据类型
【三】补充
【1】Python的传递规则#
- 严格意义上来说,Python既不是值传递,也不是引用传递,python是自己的传递方式
- 规则是:
- 如果传递的是不可变类型,在函数中修改,就不会影响原来的变量
- 如果传递的是可变数据类型,在函数中修改,不会影
def modify_immutable(x):
x += 10
print("函数内部:", x)
return x
def modify_mutable(lst):
lst.append(4)
print("函数内部:", lst)
return lst
a = 10
print(id(a))
print(id(modify_immutable(a)))
lis = [1, 2, 3, 4, 5]
print(id(lis))
print(id(modify_mutable(lis)))
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY