python變數傳遞的詳細介紹

高洛峰
發布: 2017-03-16 09:29:04
原創
1887 人瀏覽過

python變數傳遞

數值

  • #程式碼

  • ##
num_1 = 123
num_2 = num_1
# 改变num_2值前
print 'num_1 = {0}, num_2 = {1}'.format(num_1, num_2)
num_2 = 0
# 改变num_2值后
print 'num_1 = {0}, num_2 = {1}'.format(num_1, num_2)
登入後複製
  • 輸出

num_1 = 123, num_2 = 123
num_1 = 123, num_2 = 0
登入後複製
  • 結論

數值變數之間的是依值傳遞。

字串

  • 程式碼

  • #
str_1 = 'hello python'
str_2 = str_1
# 改变str_2值前
print 'str_1 = {0}, str_2 = {1}'.format(str_1, str_2)
str_2 = 'hello'
# 改变str_2值后
print 'str_1 = {0}, str_2 = {1}'.format(str_1, str_2)
登入後複製
    ##輸出
  • str_1 = hello python, str_2 = hello python
    str_1 = hello python, str_2 = hello
    登入後複製
    結論
  • #字串變數之間也是按值傳遞。

鍊錶

    程式碼
  • l_1 = [1, 2, 3, 4]
    l_2 = l_1
    print 'l_1 = {0}, l_2 = {1}'.format(l_1, l_2)
    l_2[0] = 100  # 改变l_2的第一个元素
    print 'l_1 = {0}, l_2 = {1}'.format(l_1, l_2)
    l_2 = [1,1,1] # 改变l_2的全部元素
    print 'l_1 = {0}, l_2 = {1}'.format(l_1, l_2)
    登入後複製
    輸出
  • l_1 = [1, 2, 3, 4], l_2 = [1, 2, 3, 4]
    l_1 = [100, 2, 3, 4], l_2 = [100, 2, 3, 4]
    l_1 = [100, 2, 3, 4], l_2 = [1, 1, 1]
    登入後複製
    結論
  • 從上面的輸出結果可以看到,l_1和l_2的作用類似於c/c++中的指針,l_2 = l_1的作用相當於l_2和l_1指向了同一塊內存,內容都為[1, 2, 3, 4]。當l_2[0] = 100時,l_1中的第一個元素也被改變了。 l_2 = [1,1,1]使得l_2指向了另外一塊內存,也不會對l_1的內容造成影響。

字典

    程式碼
  • d_1 = {'a': 1, 'b': 2, 'c': 3}
    d_2 = d_1
    print 'd_1 = {0}, d_2 = {1}'.format(d_1, d_2)
    
    d_2['c'] = 10
    print 'd_1 = {0}, d_2 = {1}'.format(d_1, d_2)
    
    d_2 = {'e': 12, 'f': 15}
    print 'd_1 = {0}, d_2 = {1}'.format(d_1, d_2)
    登入後複製
    輸出
  • d_1 = {'a': 1, 'c': 3, 'b': 2}, d_2 = {'a': 1, 'c': 3, 'b': 2}
    d_1 = {'a': 1, 'c': 10, 'b': 2}, d_2 = {'a': 1, 'c': 10, 'b': 2}
    d_1 = {'a': 1, 'c': 10, 'b': 2}, d_2 = {'e': 12, 'f': 15}
    登入後複製
    結論
  • 輸出結果顯示dict和list的性質一樣,直接賦值時是類似c++中的按
引用

傳遞。

物件

    程式碼
  • #
    class Point:
        def init(self, x, y):
            self.x = x
            self.y = y
        def str(self):
            return ''.join(['x = ', str(self.x), ' ', 'y = ', str(self.y)])
    
    p_1 = Point(12,34)
    p_2 = p_1
    print 'p_1: {0};  p_2: {1}'.format(p_1, p_2)
    
    p_2.x = 122
    print 'p_1: {0};  p_2: {1}'.format(p_1, p_2)
    
    p_2 = Point(89, 978)
    print 'p_1: {0};  p_2: {1}'.format(p_1, p_2)
    登入後複製
##輸出
  • p_1: x = 12 y = 34;  p_2: x = 12 y = 34
    p_1: x = 122 y = 34;  p_2: x = 122 y = 34
    p_1: x = 122 y = 34;  p_2: x = 89 y = 978
    登入後複製
結論
  • 自訂物件在賦值過程中也是按引用傳遞。
總結

Python中數值,字串在賦值過程中是按值傳遞;list、dict、物件在賦值過程中預設按引用傳遞,如果需要按值傳遞,則可以使用到

copy

模組下的copy和deepcopy

函數

以上是python變數傳遞的詳細介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板