美文网首页
对象与引用

对象与引用

作者: lambdang | 来源:发表于2016-08-03 08:42 被阅读27次

python中一切皆对象,

python中一切皆引用。


对象这是权威书籍中都有的话,但引用就不是了,根据c语言中的引用理解python中的‘变量’,更好理解。

引用指向对象,对象藏在引用后边,只能通过引用对对象操作,在python中所能见到的都是这个引用,而引用这个数据类型只保存一个数据就是对象的地址。

python中的数据类型分可变和不可变类型

字符串,元组,set,都是不可变,生成后其值无法改变,只能通过改变引用指向其他字符串来改变

>>> a="hello"

>>> id(a)

3070406016L

>>> a="world"

>>> id(a)

3070405952L

字典和列表都是可变对象,能通过引用对其改变

>>> a=[1,2,3,4]

>>> id(a)

3074666124L

>>> a[1]=5

>>> a

[1, 5, 3, 4]

>>> id(a)

3074666124L

一个对象赋值给引用表示把对象的地址赋值给了引用

一个引用赋值给引用 表示 把引用中的地址赋值给引用

>>> a=[1,2,3]

>>> b=a

>>> b

[1, 2, 3]

>>> a[0]=4

>>> b

[4, 2, 3]

有了上边的铺垫就能理解下边的函数中的参数

在大部分编程语言中,函数的参数都是“值传递”,c语言中的引用和指针虽然有址传递,但是那个址是指针或者引用的值,根本上讲也是传递的其中的内容 值,而且是复制进去的。

a=[1,2]

def f(arg):

    arg.append(3)

print(a)

f(a)

print(a)

==========================

[1, 2]

[1, 2, 3]


结果会改变因为arg这个引用也指向a所以可以通过arg改变a值类似下边代码

a=[1,2]

b=a

b.append(3)

print(a,b)

[1, 2, 3] [1, 2, 3]

看另一个例子:

a=[1,2]

def f(arg):

    arg=[3,4]

print(a)

f(a)

print(a)

结果

[1, 2]

[1, 2]

并没有改变a的值,因为参数传递的是引用的值就是参数指向了a指向的地址 但是在函数里把另一对像的地址赋值给了这个参数,至此参数跟a没有任何关系了,类似于下边代码

a=[1,2]

b=a

b=[3,4]

print(a,b)

这一切都是因为:

一切皆对象

一切皆引用

=赋值永远给的是地址

参数永远是新的引用


相关文章

  • 对象与引用

    python中一切皆对象, python中一切皆引用。 对象这是权威书籍中都有的话,但引用就不是了,根据c语言中的...

  • 面向对象

    对象与对象引用 一行代码: 其中的dasima是对象还是对象引用?答案是对象引用 两行代码: 如果dasima是一...

  • java对象与对象引用

    url

  • 数据结构_内存表示

    对象与引用对象 对象引用对于一个简单的例子:Person p=new Person("Jim",18);内存表示:...

  • js读书笔记

    js原始值类型 引用类型。对象与数组可以包含对象与数组,json的基础。装箱 拆箱值到引用与引用到值。闭包是根据定...

  • 对象与引用变量

    转自:http://www.cnblogs.com/huangyu/archive/2004/08/02/2962...

  • java.lang.ref包

    一、引用基类 Reference是所有引用对象的基类,引用对象的实现都是与GC操作相关的。 二、引用分类 1、强引...

  • Python学习笔记(5):逻辑操作符

    身份操作符 is/is not: 判断左端对象引用与否与右端对象引用相同 也可以与None进行比较 要理解这个,首...

  • 踩坑集

    1.==与equal:博客2.1 对象?对象引用?博客 2 java方法调用(call by),值调用?引用调用?...

  • Java自学-接口与继承 对象转型

    Java中的对象转型 示例 1 : 明确引用类型与对象类型的概念 首先,明确引用类型与对象类型的概念在这个例子里,...

网友评论

      本文标题:对象与引用

      本文链接:https://www.haomeiwen.com/subject/jadqsttx.html