簡體   English   中英

請解釋這兩個代碼之間的區別

[英]Please Explain the Difference between these two Codes

代碼1

nums = [1, 2, 3]
tri = nums
nums.append(4)
print(tri)       //this prints [1, 2, 3, 4]

代碼2

num = 9
num2 = num
num = 12
print num2       // this prints 9 **BUT I expected 12 like abouve code**

我的問題是,當程序和作業幾乎相似時,為什么這兩個輸出之間存在差異?

在您的第一個示例中, numstri引用相同的對象。 append方法修改了引用對象,因此numstri繼續引用相同(修改)的對象。

在第二個例子中, num被設置為一個全新的對象(12); num2繼續引用更改其值之前引用的num的對象(9)。

nums是一個列表,因此它通過引用復制,num按值復制。

您可以使用tri = nums[:]按值復制nums

代碼1你使用元組。 元組是引用類型數據。 (陣列,元組,類)

代碼2是你使用整數。 這是價值類型數據。

值類型始終將值復制到另一個內存位置。

但是引用數據類型總是將值替換為內存位置。

這個概念帶有面向對象的編程。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM