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
原因是啥