亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術文章
文章詳情頁

python小白 問關于a+=a 和a=a+a的區別

瀏覽:76日期:2022-06-28 16:28:11

問題描述

第一段代碼:

# -*- coding:gb2312 -*-a = [100]def test(num): num += num #第一段代碼 print(num) test(a)print(a)

執行結果:

python小白 問關于a+=a  和a=a+a的區別

第二段代碼:

# -*- coding:gb2312 -*-a = [100]def test(num): num = num + num #這個地方改了一下 print(num) test(a)print(a)

執行結果:

python小白 問關于a+=a  和a=a+a的區別

我的問題:num += num不應該直接等價于mun = num+num 么為什么算出來結果卻是不一樣的?這個是什么情況

問題解答

回答1:

你可以嘗試進行這樣的操作,

In [1]: a = [100]In [2]: b = [100]In [3]: id(a)Out[3]: 79308552LIn [4]: id(b)Out[4]: 79342728LIn [5]: a += aIn [6]: b = b + bIn [7]: id(a)Out[7]: 79308552LIn [8]: id(b)Out[8]: 79341192L

通過id()這個函數可以得到變量所分配的內存地址。通過實驗發現使用了+的變量地址發生了變化,也就是你所說的num+=num與num=num+num不等價。但是,當做如下騷操作時候又會發現啪啪啪打臉

In [19]: a = (0,)In [20]: b = (0,)In [21]: id(a)Out[21]: 82230688LIn [22]: id(b)Out[22]: 82208920LIn [23]: a += aIn [24]: b = b + bIn [25]: id(a)Out[25]: 79268296LIn [26]: id(b)Out[26]: 79328392L

分配的地址似乎一直在改變。原因在于,Python中的數據結構分為可變(mutable)和不可變(immutable)。對于可變類型,=和+=有著明顯的不同,如上面的list:+表示連接操作,+=表示追加對于不可變類型,=和+=就是一樣的操作,如上面的tuple可變類型與不可變類型的本質在于內存空間是否可變~

回答2:

首先看出區別在于

In [26]: def test(num): ...: num = num + num ...: print (num) ...:In [27]: def test1(num): ...: num += num ...: print (num) ...:In [28]: import disIn [29]: dis.dis(test) 2 0 LOAD_FAST0 (num) 3 LOAD_FAST0 (num) 6 BINARY_ADD #區別在這兒 7 STORE_FAST 0 (num) 3 10 LOAD_FAST0 (num) 13 PRINT_ITEM 14 PRINT_NEWLINE 15 LOAD_CONST 0 (None) 18 RETURN_VALUEIn [30]: dis.dis(test1) 2 0 LOAD_FAST0 (num) 3 LOAD_FAST0 (num) 6 INPLACE_ADD #看這兒 7 STORE_FAST 0 (num) 3 10 LOAD_FAST0 (num) 13 PRINT_ITEM 14 PRINT_NEWLINE 15 LOAD_CONST 0 (None) 18 RETURN_VALUE

可以看出分別調用的方法不同,分別是__add__,__iadd__加法運算符會計算出新的object來賦值給num增量賦值運算符修改原來的引用

參考這兒: https://stackoverflow.com/que...

回答3:

Remember that arguments are passed by assignment in Python.

傳參數在python是用assignment 不是reference,所以你傳a過去函數時傳的是a的值,而不是a本身。若你要改動a本身就需要用return傳值回來

a = [100]def test(num): num = num + num #這個地方改了一下 return(num) #這個地方再改了一下 print(test(a)) #傳值回來print(a)a = test(a)print(a)

結果:

[100, 100][100][100, 100]回答4:

在python中,a=a+b是先創建一個新的對象并讓變量a引用這個對象,a+=b是讓a所引用的對象的變成a+b的值

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 日本高清中文字幕一区二区三区 | 欧美性性性性性色大片免费的 | 亚洲精品一区二区三区www | 亚洲福利国产精品17p | 欧美一级特黄aaaaaaa在线观看 | 久久久男女野外野战 | 国产成+人欧美+综合在线观看 | 欧美日韩乱码毛片免费观看 | 国产美女做爰免费视频软件 | 生活片毛片 | 搡的我好爽视频在线观看 | 欧美大片一区二区三区 | 能免费观看的韩剧 | 久久久久青草大香线综合精品 | 亚洲国产成人久久77 | 黄色免费网站在线 | 国产一区二区在线免费观看 | 毛片视频免费网站 | 99久久爱re热6在播放 | 精品国产欧美sv在线观看 | 在线不卡免费视频 | 97久久久久国产精品嫩草影院 | 91福利小视频 | 高清国产在线播放成人 | 国产在线色视频 | 免费播放欧美毛片欧美a | 国产a级淫片| 久久综合久久美利坚合众国 | 欧美黄色大片 | 成年网站在线观看视频 | 国产一级片网站 | 成人一区二区免费中文字幕 | 国产精品99久久久 | 在线视频亚洲色图 | 成年女人色费视频免费 | 国产一区二区三区影院 | 亚洲欧美中文v日韩v在线 | 欧美日韩亚洲综合另类ac | 最新国产精品视频 | 免费片| 日本一级在线播放线观看视频 |