a = 1 b = a print(id(a),id(b)) #140723344823328 140723344823328
a = a + 1 print(b) #1
l1 = [1, 2, 3] l2 = l1 l1.append(4) print(l1) #[1, 2, 3, 4] print(l2) #[1, 2, 3, 4]
因爲l1是可變類型,所以l1.append(4)不會建立新對象,會在原列表中插入4,而l1與l2都是指向這個列表,因此值都爲[1,2,3,4]java
l = [1, 2, 3] del l #l被刪除,對象[1,2,3]仍然存在
1)c++
def my_func1(b): b = 2 a = 1 my_func1(a) print(a) #1
這裏參數傳遞後 b與a 同時指向 值爲1這個對象,接着b=2,系統創建2這個對象,並把b指向2,所以a仍是指向值爲1的對象c#
2) return讓 a 指向 b指向的 值爲2的對象def my_func2(b): b = 2 return b a = 1 a = my_func2(a) print(a) #2
3)app
def my_func3(l2): l2.append(4) l1 = [1, 2, 3] my_func3(l1) print(l1) #[1, 2, 3, 4]
def my_func4(l2): l2 = l2 + [4] l1 = [1, 2, 3] my_func4(l1) print(l1)#[1, 2, 3]
l2=l2+[4] 會建立一個新的列表對象[1,2,3,4]並把l2指向這個新對象,所以l1不會受影響函數
def my_func5(l2): l2 = l2 + [4] return l2 l1 = [1, 2, 3] l1 = my_func5(l1) print(l1) #[1, 2, 3, 4]
第3)與第5的做用是同樣的,但實際中通常會使用return語句,語義會更加清晰spa
極客時間 《Python核心技術與實戰》專欄code