jinzhu160 发表于 2022-5-8 09:14

奈陌 发表于 2022-5-8 11:17

对于Python中的复杂数据类型(如:列表、元组、字典等),如果仅仅是对其中的⼀个或多个元素进⾏修改,并不会改变其地址

Harold123 发表于 2022-5-8 11:42

楼上说的有点问题,可变类型对象有列表和字典,
元组、数字、字符串属于不可变类型对象。
举个例子,列表 list_1 = 如果你用 list_1.append(4) 你会发现前后的 id(list_1)是没有发生变化的。但是如果你使用 list_1 = ,这时的 id 就发生了变化。
而对于你说的占用资源,python的垃圾回收机制会自动回收无法再被引用的值。比如你定义 a = 1 , 然后又重新定义 a = 2 , 此时 1 的值所在的内存就会被自动回收。

jinzhu160 发表于 2022-5-8 11:44

JuncoJet 发表于 2022-5-8 12:17

Python的hash代表的就是地址,所有的数据都是建立在hash表上的,通过索引hash值得到具体数据的地址
很有意思的一个例子 a=1 b=2-1
ab的hash是相同的

Harold123 发表于 2022-5-8 12:25

jinzhu160 发表于 2022-5-8 11:44
好的,好像明白了,python 中一切数据类型都是对象,比如 int a =1 ,这个 1 也是对象,其他语言这都是值 ...

对的,python里面一切皆对象,数字、列表、字典、函数这些都是对象,变量就相当于对这些对象的引用,python变量实现方式就是引用语义,而其他语言使用值语义来实现。
C语言中定义很多个int类型变量的值都为1的话,就要同时占用很多的1的内存,但是python里面定义很多个变量值为1的话,相当于很多个变量都指向了同一个内存,当存储1的对象引用计数器变为0的时候,不会再被引用,就会自动清理掉了

jinzhu160 发表于 2022-5-8 12:48

wuai_leeda 发表于 2022-5-8 17:54

Python是面向对象语言,万物皆对象

XiaoZouYu 发表于 2022-5-8 18:33

python中的赋值就是一个面向对象,每打印一次地址都会变化只有-5到256之间整数的地址是固定

三滑稽甲苯 发表于 2022-5-8 19:14

Python有小整数池的,你试试看114514这个数,结果应该就不一样了
页: [1]
查看完整版本: python 变量没有自己独有的内存地址吗?