python-id

id是什么

id(object)函数是返回对象object在其生命周期内位于内存中的地址,id函数的参数类型是一个对象

id分配顺序

应该是随机分配的

变量的id

直接获取的是变量的地址

a= 3
print(id(a))# 2272002769200
print(id(3))# 2272002769200

很明显 a一定不是一个指针 如果是指针 a的id一定和3不一样
那说明a是变量3的一个引用

列表的id

把列表各个元素看成对元素变量的引用就行 比如
lst = [‘ab’,‘cd’,‘ab’] lst[0]是变量‘ab’的引用
列表的id并不是连续分配 而是先创建各个元素变量 分别占据相应id
再让lst[i]去分别指向这些变量
id(lst)和id(lst[0])不一样

lst = ['ab','cd','ab']
print('lst:''\'',lst,'\'',id(lst))
for i in range(len(lst)):
        print('lst[',i,']:''\'',lst[i],'\'',id(lst[i]))
print('列表外的\'','ab','\'',id('ab'))
print('列表外的\'','a','\'',id('a'))
lst[0] = 'a'
print('更改后lst[',0,']:''\'',lst[0],'\'',id(lst[0]))
print('更改后lst:''\'',lst,'\'',id(lst))

请添加图片描述
正常来说lst[0]地址不应该改变 但是在python中 当lst[0]改变存储对象时 他的 id地址跟着发生了改变 那么lst[0]到底是一个什么东西
网上说list存储的是元素的指针 那当我们把lst[0]看成val时
当lst[0] = a时 可以看成
val = a而*val = &a 那么当我们id(lst[0])是什么情况呢
按道理获取的应该是

集合id的区别

_list = [1,2,3]
_dict = {1:'a',2:'b'}
_set = {"a","b"}
_string = "abc"
_tuple = (1,2,3)
print("list id:%d",id(_list))
print("string id:%d",id(_string))
print("tuple id:%d",id(_tuple))
_list *= 2
#_dict += 2 这两个不能*2
#_set += 2
_string *= 2
_tuple *= 2
print("-----------------")
print("list id:%d",id(_list))
print("string id:%d",id(_string))
print("tuple id:%d",id(_tuple))

请添加图片描述

只有list在值发生改变之后不会更改id
原因是啥

  • 4
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值