第十题的答案为啥是TTFTT呀😭

img

img

麻烦各位帮我解答一下😭,困扰好久了😭😭,我寻思着x和y不想等呀,为啥x==y是True??然后后面的也不理解,先提前谢谢大家啦

img


第一行语句执行之后,x = y = [1, 2, 3]。Why?这是因为 Python 优化内存的机制,对可变对象的大多操作,都是原址进行的,list.append()方法即是,她是原址操作列表,残地址是没有发生改变的。我们可以用id()函数查看试试——

print(f"\nId of x -> {id(x)}")
print(f"Id of y -> {id(y)}")
print(f"Id of z -> {id(z)}")

  • x、y、z的Id

    img


    由其id可见,x、y的id相同,说明她就是在内存的同一个地址,内存的同一个地址只能是一个对象,x即是y,y即是x。所以第一条打印语句就是“True True”。虽然x(y)、z的值都是[1, 2, 3],但内存地址不同,不是同一对象,所以 x is z 是False。第二条打印语句会输出“False True True”。
  • python 代码
#!/sur/bin/nve python
# coding: utf-8


x = y = [1, 2]; x.append(3)
print(x is y, x == y, end=' ')
z = [1, 2, 3]
print(x is z, x == z, y == z)


x is y都是true了,x==y怎么可能是false,它俩指向的是同一个对象呀
修改x的时候,y也跟着变了
记住,有可能x==y是true,但是x is y是false,也就是说两个对象指向的不是同一个地址,但是里面的值相同
而地址一样值必定一样
-=-=--=-=--=
打个比方,好比两个照片,如果指向的是不同的人,那么身高也可能一样
但是如果两个照片根本就是同一个人的,那么这两个照片所代表的人的身高可能会不同吗