[英]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.