零基础的第12讲的课后习题
>>> old =>>> new = old
>>> old =
>>> print(new)
这个为什么打印的是??
不是相当于new的指针指向old么不应该是么?
为什么old排序的话new会跟着变 重新赋值就不会变? 只有在用列表的内置方法时才会出现你说的情况
你这样操作的话就相当于新建一个叫 old 同名列表 本帖最后由 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地址
Twilight6 发表于 2020-5-13 23:20
这个就有关id的问题了,python中每个变量都有id地址
你可以调用 id(变量名) 就可查询该变量的id地址...
所以我可以理解为old=和原来的old列表没有任何关系,只是同名在内存上地址是不一样的 所以不影响new是么 liuzhengyuan 发表于 2020-5-13 23:11
只有在用列表的内置方法时才会出现你说的情况
你这样操作的话就相当于新建一个叫 old 同名列表
言简意赅多谢!
本帖最后由 Twilight6 于 2020-5-14 09:11 编辑
lsc顺 发表于 2020-5-13 23:33
所以我可以理解为old=和原来的old列表没有任何关系,只是同名在内存上地址是不一样的 所以不影响new ...
对哒~~~ 不同名噢直接把原本的覆盖了,而且id地址也改变了
python中变量名是标签,你将变量名重新赋值,意味着将这个标签从原来的地址上撕下来贴到新的地址上去了
可以看看我写的帖子
python细节之2、变量名与标签 变量的赋值与修改 old = 相当于将 old 指向了另外一个列表,此时 old 和 new 一点关系都没有了。
而 old.sort() 的意思是对 old 指向的列表进行原地排序,不会改变 old 指向的位置,所以 old 和 new 会一起变。 Twilight6 发表于 2020-5-13 23:20
这个就有关id的问题了,python中每个变量都有id地址
你可以调用 id(变量名) 就可查询该变量的id地址...
兄弟豁,网络安全搞太多了,id和ip分不清了吗{:10_250:} qiuyouzhi 发表于 2020-5-14 09:10
兄弟豁,网络安全搞太多了,id和ip分不清了吗
哈哈哈哈{:10_266:}谢谢提醒 qiuyouzhi 发表于 2020-5-14 09:10
兄弟豁,网络安全搞太多了,id和ip分不清了吗
大佬您是做网安的么。。我现在学得太杂了。不知道怎么继续了。。求指导。
学了数通ip在学安全ie 数据库mysql学了点基础 linux学了点 不过一直不用都忘了正在学Python,html和css也学了个基础。后面怎么继续。。渗透测试是先开始用kali里的工具么?
页:
[1]