可以看看不(;`O)o
这是一个数字只能存在一个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
>>> 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
>>>
id 是 Python 开辟内存时的地址,你新建个数据时候就可以新建 id 地址了呀
只不过 Python 的不可变数据在创建相同数据内容时不会开辟新的内存,会共用一个内存地址
而可变数据每次重新对变量赋值具体数据,不管是否与其他数据内容相同,总会开辟一个新的地址
数值型数据属于不可变类型数据,所以当数值大小相同时,会共用一个 id 地址
大佬能讲的简单一点吗? mengxingyimei1 发表于 2021-7-11 18:04
大佬能讲的简单一点吗?
id就是一个变量在内存中的位置
(话说你看不懂就设最佳啊...{:10_282:}) 学渣李某人 发表于 2021-7-11 18:06
id就是一个变量在内存中的位置
(话说你看不懂就设最佳啊...)
还是有些不懂,那是不是可以说只要数据内容相同,就不占用内存了?
不可变数据 mengxingyimei1 发表于 2021-7-11 18:36
还是有些不懂,那是不是可以说只要数据内容相同,就不占用内存了?
不是, 每个变量都有一个, 就算内容一样, 只要名字不同, 就存在不同的地址 学渣李某人 发表于 2021-7-11 18:38
不是, 每个变量都有一个, 就算内容一样, 只要名字不同, 就存在不同的地址
那内存当中就固定只有一个0,一个1,变量只是引用了这些不可变数字,是这样吗? mengxingyimei1 发表于 2021-7-11 18:40
那内存当中就固定只有一个0,一个1,变量只是引用了这些不可变数字,是这样吗?
内存是一块空间, 有数以万计的地址, 每个变量都可以存在其中一个位置, 如果地址重了, 那么这两个变量实际上就是完全一样的 有人说Python的变量像c语言的指针, 指向的是地址, 实际也是这样, 其实这不是很重要, 太底层了 还有, 不要改id, 没法改, 改了你的变量就到了别的地方, 会出严重问题(c语言中的致命问题: 数据溢位) mengxingyimei1 发表于 2021-7-11 18:40
那内存当中就固定只有一个0,一个1,变量只是引用了这些不可变数字,是这样吗?
https://smartkeyerror.oss-cn-shenzhen.aliyuncs.com/Snorlax/pointer/simple-memory.png
内存就像这些格子, 变量名就是格子的名, 变量的内容就是格子存储的东西 哦哦哦(-ω-`)懂了懂了大佬 蟹蟹辣 {:5_95:}
页:
[1]