2017-06-18 54 views
-1

我正在學習初學者編程課程中的對象和引用,我正在學校學習,並且對構成「對象」的構成有點困惑。具體而言,我不知道如何確定列表中有多少個對象。列表中有多少個不同的對象?

執行以下操作後,有多少個值爲[1,2]的不同的列表對象?

lst1 = [1, 2] 
lst2 = [[1, 2], list(lst1), lst1] 
lst3 = list(lst2) 
lst3.append([1, 2]) 
lst4 = [] 

for lst in lst3: 
    lst4.append(list(lst)) 

感謝您的任何幫助/澄清。

+1

這看起來像功課...你有什麼嘗試?你自己的想法是什麼?爲什麼? –

回答

0

不同列表的數量[1,2]是。我們可以通過去在程序行每行計算這個

lst1 = [1, 2] # we create our first [1,2] 

下一步,我們構造列表的列表,如:

lst2 = [[1, 2], list(lst1), lst1] 
#  ^ ^

在這裏,我們已經創建了兩個額外的[1,2]列表(用插入符號^表示)。第一個由另一個[1,2]列表字面量,第二個通過調用list(lst1)。構造函數創建一個副本的列表,所以一個新列表[1,2]

接下來我們進行的lst2一個副本:

lst3 = list(lst2) 

在這裏,我們做沒有新[1,2]名單:我們創建具有三個元素的新名單,但這些都是指相同列表爲lst2

lst3.append([1,2]) 
#   ^

接下來我們添加一個新[1,2]lst3。因此,將總數截至[1,2]秒。

下一步,我們將遍歷lst3並進行淺拷貝的元素lst3。由於lst3有四個不同的[1,2]對象,因此,我們將介紹另外四個[1,2]對象:

lst4 = [] 

for lst in lst3: 
    lst4.append(list(lst)) 
    #   ^

所以我們獲得總:

Expression | Count 
-----------+------ 
lst1 = ... |  1 
lst2 = ... |  2 
lst3 = ... |  0 
lst3.appe. |  1 
for ... |  4 
-----------+------ 
TOTAL   8 

內存佈局

的工作後, ,內存看起來像:

lst1 -------------+------------+-> [1,2] 
        |   | 
     +---+---+-|-+   | 
lst2 -> | o | o | o |   | 
     +-|-+-|-+---+   | 
      | \--------> [1,2] | 
      +-> [1,2] ^ | 
      | /----------/  | 
      | | /------------/ 
     +-|-+-|-+-|-+---+ 
lst3 -> | o | o | o | o---> [1,2] 
     +---+---+---+---+ 
      /-> [1,2] 
      |  /-> [1,2] 
     +-|-+---+-|-+---+ 
lst4 -> | o | o | o | o---> [1,2] 
     +---+-|-+---+---+ 
       \-> [1,2] 
+0

'^'是*符號*,胡蘿蔔是一種尖尖的橙根蔬菜 – jonrsharpe

+0

只是好奇,你用什麼來產生內存佈局的整潔表示? – stybl

+0

@jonrsharpe:越來越累了:)感謝您的發現。 –