![](/img/trans.png)
[英]Python : why results are same when i put int or list or tuple in list?
[英]Why are the outputs not the same when it is either a list, int or string?
从我的pygame游戏复制(并更改)了一些代码。 但是发生同样的问题,我不明白。 为什么background_pos_init是列表,整数或字符串时输出为何不同?
class Player():
def __init__(self):
self.pos_init = [16]
self.pos = self.pos_init
class Window():
def __init__(self):
self.background_pos_init = [0]
self.background_pos = self.background_pos_init
def moveBackground(self):
self.background_pos[0] = self.background_pos_init[0] + player.pos[0]
print(self.background_pos)
print(self.background_pos_init)
player = Player()
window = Window()
window.moveBackground()
给出输出:
============== RESTART: C:\Users\SAMP\Documents\Python\test.py ==============
[16]
[16]
>>>
和
class Player():
def __init__(self):
self.pos_init = 16
self.pos = self.pos_init
class Window():
def __init__(self):
self.background_pos_init = 0
self.background_pos = self.background_pos_init
def moveBackground(self):
self.background_pos = self.background_pos_init + player.pos
print(self.background_pos)
print(self.background_pos_init)
player = Player()
window = Window()
window.moveBackground()
给出输出:
============== RESTART: C:\Users\SAMP\Documents\Python\test.py ==============
16
0
如果我将值更改为“ str”,则输出为:
============== RESTART: C:\Users\SAMP\Documents\Python\test.py ==============
strstr
str
这是因为,当您将变量声明为list时,它将存储对象的引用(内存地址)。 当您通过index访问变量时,两个对象都会更新同一列表对象的值。 但是,当您不使用索引进行初始化时,情况并非如此。 在这种情况下,将新对象初始化为变量。
因此,在您的示例中:
self.background_pos_init = [0]
self.background_pos = self.background_pos_init
self.background_pos_init
和self.background_pos
保存同一列表的引用。 因此,当您在一个列表中更改值时,它将反映在保存该值的两个变量中。
但这在示例2中是不正确的:
self.background_pos_init = 0
self.background_pos = self.background_pos_init
无论self.background_pos_init
和self.background_pos
当您更新的价值,假设持有价值为0 x = 0
,有值的新对象0
被映射到对象x,和您的其他变量仍然会仍持有的价值较旧的对象。
不清楚您要问的是什么,但是我认为这是因为您实际上看不到变量之间的关系。
您在这里有三个语句:
self.pos_init = 16
self.background_pos_init = 0
self.background_pos = self.background_pos_init + player.pos
让我们简化一下。 考虑以下:
pos_init = 16
background_pos_init = 0
background_pos = background_pos_init + pos_init
为什么print(background_pos)
显示16? 如果我们更改代码:
pos_init = [16]
background_pos_init = [0]
background_pos[0] = 0
background_pos[0] = background_pos_init[0] + pos_init[0]
print(background_pos)
为什么显示[16]
?
如果您有:
pos_init = 'str'
background_pos_init = 'str'
background_pos = background_pos_init + pos_init
为什么print(background_pos)
打印strstr
?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.