关于python容器(dict、set、list、tuple) 内容相同的两个变量的内存地址是否相同

关于python容器(dict、set、list、tuple) 内容相同的两个变量的内存地址是否相同

结论:python容器(dict、set、list、tuple) 内容相同的两个变量,本质上内存地址是不同的。

print('----dict----')
dict1 = {3: 'haha', 4: 'haha', 5:'haha'}
dict2 = {3: 'haha', 4: 'haha', 5:'haha'}
print(id(dict1))
print(id(dict2))

print('----set----')
set1 = {3, 4}
set2 = {3, 4}
print(id(set1))
print(id(set2))

print('----list----')
ls1 = [1, 2, 3]
ls2 = [1, 2, 3]
print(id(ls1))
print(id(ls2))

print('----tuple----')
tu1 = (ls1, ls2)
tu2 = (ls1, ls2)
print(id(tu1))
print(id(tu2))

关于python容器(dict、set、list、tuple) 内容相同的两个变量的内存地址是否相同_第1张图片
可以看到这四种类型内容相同的两个变量,所指向的内存地址都不同。接下来,用图来更好的展示内存的分配。
关于python容器(dict、set、list、tuple) 内容相同的两个变量的内存地址是否相同_第2张图片
关于python容器(dict、set、list、tuple) 内容相同的两个变量的内存地址是否相同_第3张图片

关于python容器(dict、set、list、tuple) 内容相同的两个变量的内存地址是否相同_第4张图片
关于python容器(dict、set、list、tuple) 内容相同的两个变量的内存地址是否相同_第5张图片
但是,也有内存相同的情况。
1.如果两个变量之间存在赋值操作,那么指向的地址相同。

print('----list----')
ls1 = [1, 2, 3]
ls2 = ls1
# ls2 = [1, 2, 3]
print(id(ls1))
print(id(ls2))

在这里插入图片描述
关于python容器(dict、set、list、tuple) 内容相同的两个变量的内存地址是否相同_第6张图片
2.因为缓存机制(不仅包括python自己的,而且包括IDEA的),使得同一对象被重复使用,两个变量指向同一内存地址。

其实,python等号右边的是对象,等号左边的只是别名(变量名),对象相当于一个活生生的人,别名只是人的名字,每个人都是独立的个体,但是每个人可以有多个名字。

你可能感兴趣的:(python基础,python)