大家好我知道这段代码的作用:
1.]我的第一个问题
x = 4
y = x
但是这个呢。为什么即使在这种情况下也会使用相同的地址?
x = 4
y = 4
id(x)
12345678
id(y)
12345678
2.]我的第二个问题
x = 42
y = x
x = x + 1
print x # Prints 43
print y # Prints 42
x = [1, 2, 3]
y = x
x[0] = 4
print x # Prints [4, 2, 3]
print y # Prints [4, 2, 3]
但为什么在列表的情况下,x
和& y
通过命令x[0] = 4
一起变异。{
在这样的行为中,列表有什么不同?
是什么让他们表现得像这样?
最重要的是这种行为的好处是什么?
为什么不能列出,变量,元组具有彼此的所有属性?
答案 0 :(得分:8)
整数示例:
>>> x = 100
>>> y = x
>>> id(x),id(y)
(165193204, 165193204)
>>> x += 1
>>> id(x), id(y) #`x` now points to a new object, `y` still points to the old object
(165193192, 165193204)
答案 1 :(得分:2)
您的第一个问题可以通过内存优化来解决。如果你进一步挖掘,例如:
x = 4
y = 4
# Both (may) have the same id
x += 1
# id of x and y will now be different
第二个是引用语义。由于Python中几乎所有内容都是引用,因此设置x = y
只是将指向y
指向x
指向的同一事物。如果你真的想要一个完全独立的副本,你需要这样说:
x = [1, 2, 3, 4]
y = x[:]
x[0] = 5
y
>>> [1, 2, 3, 4]