整理Python的数据类型和内存地址及存储内容之间的关系

前段时间面试被Python巨基础的知识点卡挂了,学习之后今天整理一下。

结论:不可变数据类型,参数的内存地址和数据本身有关,和参数无关。可变的序列类型和映射类型等,参数的内存地址指定的是数据类型的外包装盒子,跟里面数据的变化没有关联。

Python中的基础数据类型有数字类型(int,float,complex)、文本类型(str)、序列类型(tuple元组、list列表、range范围)、映射类型(dict字典)、集合(set)。

其中数字类型、文本类型和元组,是不可变的。

结合以前对其他语言的掌握,发现用贴标签来理解参数、数据和内存地址的关系最合适不过了。

1,不可变数据类型        

int1 = 100
int2 = 200
int3 = int1
print(f"int1的内存地址是:{id(int1)},int1={int1}")
print(f"int2的内存地址是:{id(int2)},int2={int2}")
print(f"int3的内存地址是:{id(int3)},int3={int3}")

int1 = 300
int2 = 400
print(f"int1的内存地址是:{id(int1)},int1={int1}")
print(f"int2的内存地址是:{id(int2)},int2={int2}")
print(f"int3的内存地址是:{id(int3)},int3={int3}")

运行结果:
int1的内存地址是:140733336061464,int1=100
int2的内存地址是:140733336064664,int2=200
int3的内存地址是:140733336061464,int3=100

int1的内存地址是:1604551704752,int1=300
int2的内存地址是:1604551704944,int2=400
int3的内存地址是:140733336061464,int3=100

通过上面的代码和运行结果,可以总结:不可变数据类型,新建参数,就好比在数据上贴标签,像int1=int3就可以理解为在100上贴了2个标签。int1重新赋值300的时候,就好比在300的数据上贴了int1的标签,100的数据上还是int3的标签。参数的内存地址和数据本身有关,和参数无关。

2,可变数据类型

list1 = [1,2,3]
list2 = [10,20,30]
list3 = list1
print(f"list1的内存地址是:{id(list1)},list1={list1}")
print(f"list2的内存地址是:{id(list2)},list2={list2}")
print(f"list3的内存地址是:{id(list3)},list3={list3}")

list1.append(4)
list2.append(40)
print(f"list1的内存地址是:{id(list1)},list1={list1}")
print(f"list2的内存地址是:{id(list2)},list2={list2}")
print(f"list3的内存地址是:{id(list3)},list3={list3}")

 结果是:

list1的内存地址是:2247159304576,list1=[1, 2, 3]
list2的内存地址是:2247159306432,list2=[10, 20, 30]
list3的内存地址是:2247159304576,list3=[1, 2, 3]

list1的内存地址是:2247159304576,list1=[1, 2, 3, 4]
list2的内存地址是:2247159306432,list2=[10, 20, 30, 40]
list3的内存地址是:2247159304576,list3=[1, 2, 3, 4]

通过上面的代码和运行结果,可以发现list1和list3的地址,全程没有发生过变化。这类数据的标签是放在列表外面的[],类别类似一个盒子,在盒子上贴标签,跟盒子里的数据变化没有关系。同理,list1修改之后,list3随着一起变化了,是因为他们贴在了同一个盒子上。可变的序列类型和映射类型等,参数指定的是数据类型的外包装盒子,跟里面数据的变化没有关联。

理解了上面两段代码,在有面试问数据类型和地址的变化关系,就一点问题没有啦~

继续努力ヾ(◍°∇°◍)ノ゙ 

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值