python在函數的修改變量值


這篇文章轉載自https://blog.csdn.net/bobsweetie/article/details/68483083

    和其他語言不一樣,傳遞參數的時候,python不允許程序員選擇采用傳值還是傳引用。Python參數傳遞采用的肯定是“傳對象引用”的方式。
實際上,這種方式相當於傳值和傳引用的一種綜合。如果函數收到的是一個可變對象(比如字典或者列表)的引用,
就能修改對象的原始值--相當於通過“傳引用”來傳遞對象。如果函數收到的是一個不可變對象(比如數字、字符或者元組)的引用,
就不能直接修改原始對象--相當於通過“傳值'來傳遞對象。
python一般內部賦值變量的話,都是傳個引用變量,和C語言的傳地址的概念差不多。可以用id()來查詢內存地址


下面的str_是可修改的對象,因此在add函數中可以修改:


   
   
   
           
  1. #!/usr/bin/env python
  2. #coding=utf-8
  3. def add(s):
  4. s += 'b'
  5. print "In add function :", s
  6. if __name__ == "__main__":
  7. str_ = list( "aaa")
  8. add(str_)
  9. print "In main function:", str_

輸出為:


   
   
   
           
  1. In add function : [ 'a', 'a', 'a', 'b']
  2. In main function: [ 'a', 'a', 'a', 'b']




下面的str_是不可修改的對象,因此在add函數中不能修改:


   
   
   
           
  1. #!/usr/bin/env python
  2. #coding=utf-8
  3. def add(s):
  4. s += 'b'
  5. print "In add function :", s
  6. if __name__ == "__main__":
  7. str_ = "aaa"
  8. add(str_)
  9. print "In main function:", str_


   
   
   
           
  1. In add function : aaab
  2. In main function: aaa

關於python的復制

   
如果a=b的話, a和b的地址是相同的;如果只是想拷貝,那么就得用 a=b[:]。

!!!注意這一點,這可是可以引起重大錯誤的。。。



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM