【python】变量进阶

一、变量的引用


1. 引用的概念

  在 python 中,变量与数据是分开存储的,数据保存在内存中的一个位置,变量中保存着数据在内存中的地址,即变量中是记录着数据的地址。

  如果变量已经被定义,当给变量赋值时,本质上时修改了数据的引用地址。

2. 函数的参数和传递返回值

  在 python 中,参数的实参/返回值 都是靠引用来传递

    def test(num):

        print("-" * 50)
        print("%d 在函数内的内存地址是 %x" % (num, id(num)))

        result = 100

        print("返回值 %d 在内存中的地址是 %x" % (result, id(result)))
        print("-" * 50)

        return  result

    a = 10
    print("调用函数前 内存地址是 %x" % id(a))

    r = test(a)

    print("调用函数后 实参内存地址是 %x" % id(a))
    print("调用函数后 返回值内存地址是 %x" % id(r))



调用函数前 内存地址是 a67be0
--------------------------------------------------
10 在函数内的内存地址是 a67be0
返回值 100 在内存中的地址是 a68720
--------------------------------------------------
调用函数后 实参内存地址是 a67be0
调用函数后 返回值内存地址是 a68720

 

二、 可变类型和不可变类型

  • 不可变类型,内存中的数据不允许修改
    • 数字型 int, bool, float, complex, long(2.x)
    • 字符串 str
    • 元组 tuple
  • 可变类型
    • 列表 list
    • 字典 dict
      • 字典的 key 只能使用不可变类型

  可变类型和不可变类型 = 和 += 的区别:

  • 可变类型
    • + 表示连接操作,如 a = a + b 是创建一个新的对象引用 a 这个对象,等式左侧 a 和右侧 a 引用的内存地址不同
    • += 表示追加,本质上是调用 extend 方法,如 a += b, a 引用的内存地址相同
  • 不可变类型
    • + 和 += 一样

  

  可变类型数据的变化,实际上是通过 方法 来实现的。

posted @ 2019-03-20 15:12  唱歌的石头  阅读(245)  评论(0编辑  收藏  举报