Loading

可变和不可变数据类型

【一】可变数据类型

  • 对于可变数据类型(如列表,字典等),在函数中修改参数会影响原始对象

【1】字典

dic = {'name': 'Green', 'sex': 'male', 'age': '22'}
print(id(dic))  # 1210849384512
# 修改字典中的值
dic['name'] = 'hqq' # 2359802091584
print(id(dic))
# 对字典进行操作时,值改变的情况下,字典的id也是不变的,所以字典也是可变数据类型

【2】元组

tuple_1 = ('green', 'hqq', [22, '10k'])
tuple_1[1] = 'tom' # 报错:TypeError
tuple_1.append('good') # 报错:TypeError
  • 元组内元素无法修改指的是元组内索引指向的内存地址不能被修改
tuple_1 = ('green', 'hqq', [22, '10k'])
print(tuple_1) # ('green', 'hqq', [22, '10k'])
print(id(tuple_1)) # 1730656266560
tuple_1[2][1] = 11
print(tuple_1) # ('green', 'hqq', [22, 11])
print(id(tuple_1)) # 1730656266560
  • 如果元组内存在可变类型,修改可变类型后内存地址不变,所以元组也是可变数据类型

【3】列表

list_1 = ['green', 'hqq', '21']
print(id(list_1))  # 2603191532992
list_1[1] = 'GG_BOND'
print(list_1)  # ['green', 'GG_BOND', '21']
print(id(list_1))  # 2603191532992
  • 可以看到修改列表内容后列表的内存地址没有发生改变,所以列表也是可变数据类型

【4】集合类型

my_set = {1, 2, 3}
print(id(my_set))  # 1175390100992

my_set.add(4)
print(my_set)  # {1, 2, 3, 4}
print(id(my_set))  # 1175390100992
  • 内存地址不变,集合也是可变数据类型

【二】不可变数据类型

【1】布尔类型

is_bool = True
print(is_bool) #True
print(id(is_bool)) # 140716556983144
is_bool = False
print(is_bool) # False
print(id(is_bool)) # 140716556983176
  • 布尔值的内容改变时,内存地址会改变,所以布尔值是不可变数据类型

【2】数字类型

num = 22
print(id(num))  # 140716558509512
num = 23
print(id(num))  # 140716558509544
  • 数字改变时,内存地址会改变,所以数字类型也是不可变数据类型

【3】字符串类型

str_1 = 'My name is green'
print(id(str_1))  # 1962745145152
str_1 = 'My name is hqq'
print(id(str_1))  # 1962744306032
  • 当字符串发生改变时,其内存地址也会改变,所以字符串是一个不可变数据类型

【三】补充

【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))  # 140716576597064
print(id(modify_immutable(a)))  # 140716576597384
lis = [1, 2, 3, 4, 5]

print(id(lis))  # 2426037108160
print(id(modify_mutable(lis)))  # 2426037108160
posted @ 2024-01-13 23:09  HuangQiaoqi  阅读(11)  评论(0编辑  收藏  举报