lsc顺 发表于 2020-5-13 23:06:35

零基础的第12讲的课后习题

>>> old =

>>> new = old

>>> old =

>>> print(new)
这个为什么打印的是??
不是相当于new的指针指向old么不应该是么?
为什么old排序的话new会跟着变   重新赋值就不会变?

liuzhengyuan 发表于 2020-5-13 23:11:49

只有在用列表的内置方法时才会出现你说的情况
你这样操作的话就相当于新建一个叫 old 同名列表

Twilight6 发表于 2020-5-13 23:20:50

本帖最后由 Twilight6 于 2020-5-14 09:24 编辑


这个就有关id的问题了,python中每个变量都有id地址
你可以调用 id(变量名) 就可查询该变量的id地址 ,同个id地址的源头相同
只要id源头本身一发生改变,关联这个ip的所有变量都会随之改变
前提是同id

old =
new = old
你这里old和 new 在这之前 id 地址都是相同的
但是到这时候:old = 是把一个重新赋值给了old而不是在他本身的列表上进行改变
就相当于old = 覆盖了你之前的 old = 而且id地址变了
所以后来的new 和 old 没有关系了 new 还是 原本的id ,只是old 被你重新赋予了一个值,等于更换了一个id地址
所以 打印 new 结果还是

但是为什么sort()排序可以一起改变呢?就是因为sort方法是在列表的本身上进行改变,id地址并不发生变化
所以当你使用sort 时候两者是关联的,一起发生改变
相同的还有remove()、append()、pop()等这些都是在列表本身上发生改变,并不会改变id地址

lsc顺 发表于 2020-5-13 23:33:52

Twilight6 发表于 2020-5-13 23:20
这个就有关id的问题了,python中每个变量都有id地址
你可以调用 id(变量名) 就可查询该变量的id地址...

所以我可以理解为old=和原来的old列表没有任何关系,只是同名在内存上地址是不一样的 所以不影响new是么

lsc顺 发表于 2020-5-13 23:34:25

liuzhengyuan 发表于 2020-5-13 23:11
只有在用列表的内置方法时才会出现你说的情况
你这样操作的话就相当于新建一个叫 old 同名列表

言简意赅多谢!

Twilight6 发表于 2020-5-13 23:43:13

本帖最后由 Twilight6 于 2020-5-14 09:11 编辑

lsc顺 发表于 2020-5-13 23:33
所以我可以理解为old=和原来的old列表没有任何关系,只是同名在内存上地址是不一样的 所以不影响new ...

对哒~~~ 不同名噢直接把原本的覆盖了,而且id地址也改变了

sunrise085 发表于 2020-5-13 23:46:44


python中变量名是标签,你将变量名重新赋值,意味着将这个标签从原来的地址上撕下来贴到新的地址上去了
可以看看我写的帖子
python细节之2、变量名与标签 变量的赋值与修改

zltzlt 发表于 2020-5-14 07:58:13

old = 相当于将 old 指向了另外一个列表,此时 old 和 new 一点关系都没有了。

而 old.sort() 的意思是对 old 指向的列表进行原地排序,不会改变 old 指向的位置,所以 old 和 new 会一起变。

qiuyouzhi 发表于 2020-5-14 09:10:25

Twilight6 发表于 2020-5-13 23:20
这个就有关id的问题了,python中每个变量都有id地址
你可以调用 id(变量名) 就可查询该变量的id地址...

兄弟豁,网络安全搞太多了,id和ip分不清了吗{:10_250:}

Twilight6 发表于 2020-5-14 09:10:57

qiuyouzhi 发表于 2020-5-14 09:10
兄弟豁,网络安全搞太多了,id和ip分不清了吗

哈哈哈哈{:10_266:}谢谢提醒

lsc顺 发表于 2020-5-14 11:43:58

qiuyouzhi 发表于 2020-5-14 09:10
兄弟豁,网络安全搞太多了,id和ip分不清了吗

大佬您是做网安的么。。我现在学得太杂了。不知道怎么继续了。。求指导。
学了数通ip在学安全ie   数据库mysql学了点基础   linux学了点 不过一直不用都忘了正在学Python,html和css也学了个基础。后面怎么继续。。渗透测试是先开始用kali里的工具么?
页: [1]
查看完整版本: 零基础的第12讲的课后习题