鱼C论坛

 找回密码
 立即注册
查看: 1552|回复: 14

[已解决]可以看看不(;`O)o

[复制链接]
发表于 2021-7-11 17:29:23 From FishC Mobile | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
这是一个数字只能存在一个id嘛?
有什么办法可以改变这些id?

>>> a = [i for i in range(0,10)
... ]
>>> b = a
>>> id(a) == id(b)
True
>>> id(a)
4091694776
>>> a.pop(0)
0
>>> id(a)
4091694776
>>> a
[1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> id(1)
4102403432
>>> id(0)
4102403416
>>> for i in a:
...     print(id(i))
...
4102403432
4102403448
4102403464
4102403480
4102403496
4102403512
4102403528
4102403544
4102403560
>>> c = 0
>>> id(c)
4102403416
>>> 0
0
>>> import copy
>>> d = copy.deepcopy(a)
>>> for i in d:
...     print(id(i))
...
4102403432
4102403448
4102403464
4102403480
4102403496
4102403512
4102403528
4102403544
4102403560
>>> id(a) == id(d)
False
>>> 0 = a
  File "<stdin>", line 1
SyntaxError: can't assign to literal
>>> 0 = 1
  File "<stdin>", line 1
SyntaxError: can't assign to literal
>>> id(0) = id(1)
  File "<stdin>", line 1
SyntaxError: can't assign to function call
>>>



最佳答案
2021-7-11 17:53:02

id 是 Python 开辟内存时的地址,你新建个数据时候就可以新建 id 地址了呀

只不过 Python 的不可变数据在创建相同数据内容时不会开辟新的内存,会共用一个内存地址

而可变数据每次重新对变量赋值具体数据,不管是否与其他数据内容相同,总会开辟一个新的地址

数值型数据属于不可变类型数据,所以当数值大小相同时,会共用一个 id 地址
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-7-11 17:53:02 | 显示全部楼层    本楼为最佳答案   

id 是 Python 开辟内存时的地址,你新建个数据时候就可以新建 id 地址了呀

只不过 Python 的不可变数据在创建相同数据内容时不会开辟新的内存,会共用一个内存地址

而可变数据每次重新对变量赋值具体数据,不管是否与其他数据内容相同,总会开辟一个新的地址

数值型数据属于不可变类型数据,所以当数值大小相同时,会共用一个 id 地址
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-7-11 18:04:43 From FishC Mobile | 显示全部楼层
大佬能讲的简单一点吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-7-11 18:06:30 | 显示全部楼层
mengxingyimei1 发表于 2021-7-11 18:04
大佬能讲的简单一点吗?

id就是一个变量在内存中的位置
(话说你看不懂就设最佳啊...)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-7-11 18:36:47 From FishC Mobile | 显示全部楼层
学渣李某人 发表于 2021-7-11 18:06
id就是一个变量在内存中的位置
(话说你看不懂就设最佳啊...)

还是有些不懂,那是不是可以说只要数据内容相同,就不占用内存了?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-7-11 18:37:36 From FishC Mobile | 显示全部楼层
不可变数据
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-7-11 18:38:20 | 显示全部楼层
mengxingyimei1 发表于 2021-7-11 18:36
还是有些不懂,那是不是可以说只要数据内容相同,就不占用内存了?

不是, 每个变量都有一个, 就算内容一样, 只要名字不同, 就存在不同的地址
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-7-11 18:40:32 From FishC Mobile | 显示全部楼层
学渣李某人 发表于 2021-7-11 18:38
不是, 每个变量都有一个, 就算内容一样, 只要名字不同, 就存在不同的地址

那内存当中就固定只有一个0,一个1,变量只是引用了这些不可变数字,是这样吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-7-11 18:42:44 | 显示全部楼层
mengxingyimei1 发表于 2021-7-11 18:40
那内存当中就固定只有一个0,一个1,变量只是引用了这些不可变数字,是这样吗?

内存是一块空间, 有数以万计的地址, 每个变量都可以存在其中一个位置, 如果地址重了, 那么这两个变量实际上就是完全一样的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-7-11 18:43:37 | 显示全部楼层
有人说Python的变量像c语言的指针, 指向的是地址, 实际也是这样, 其实这不是很重要, 太底层了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-7-11 18:45:17 | 显示全部楼层
还有, 不要改id, 没法改, 改了你的变量就到了别的地方, 会出严重问题(c语言中的致命问题: 数据溢位)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-7-11 18:47:15 | 显示全部楼层
mengxingyimei1 发表于 2021-7-11 18:40
那内存当中就固定只有一个0,一个1,变量只是引用了这些不可变数字,是这样吗?


                               
登录/注册后可看大图


内存就像这些格子, 变量名就是格子的名, 变量的内容就是格子存储的东西
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-7-11 19:06:11 From FishC Mobile | 显示全部楼层
哦哦哦(-ω-`)懂了懂了大佬
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-7-11 19:07:11 From FishC Mobile | 显示全部楼层
蟹蟹辣
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-7-11 19:40:24 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-6-1 19:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表