python自定义类似可变对象吗_python 对象类型 动态类型 不可变对象

本文探讨了Python语言中变量与对象的关系,指出Python没有传统意义上的变量类型,只有对象类型。标识符在Python中相当于引用,可以指向任何类型的对象,体现了Python的动态类型特性。同时,介绍了Python中的可变对象和不可变对象,以及赋值过程中对象的变化情况。通过实例展示了可变对象和不可变对象在赋值操作上的区别,强调了Python中'='实际上是引用/指向的含义。

在很多计算机语言中,有 int,float,string 等变量类型

# Java or C

int a=10; #定义一个整型变量a,并给其赋值为10

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

int a; #定义一个整型变量a

a=10; #给变量a赋值为10

在这方面,python语言,与这些语言完全不同;在python中没有变量类型,只有对象类型

或者说python中所谓变量的概念,含义与其他语言不同,用"标识符"这个词来描述会更恰当一些

python中 整数、浮点数、字符串 都是对象,可以称为整型对象、浮点型对象、字符串对象

为方便地使用对象,要给该对象取一个名字来标识它,这个名字就是标识符

标识符 就像指针一样,可以指向任何的对象类型;而且可以随时指向另外一种不同类型的对象

我们可以这样认为,python中的"="是"引用/指向"的意思,与其他语言中的"赋值"不完全相同

动态类型 就是指标识符可以引用(指向)任何类型的对象,而自身却没有变量类型的概念

动态类型 自动跟踪对象的类型而不要求代码声明

因为python的标识符可以引用任何类型的对象(包括函数等),所以给予了python极大的灵活性

a=2 #整型对象2的标识符a

b=3.3 #浮点型对象3.3的标识符b

str='hello' #字符串对象'hello'的标识符str

bo=True

print(type(a),type(b),str.__class__,bo.__class__) #都是类的对象

#运行反馈

#也可这样描述

a引用整型对象2

b引用浮点型对象3.3

str引用字符串对象'hello'

b1引用布尔对象True

特别注意的是,python沿用了其他语言中变量的提法,例如全局变量、本地变量等

但是我们要清楚python中变量的概念与其他语言有很大的不同

python中的对象分为:可变对象和不可变对象

可变对象:   列表、字典

不可变对象:  数字、字符串、元组

#可变对象

may2=['hello',5]

print(id(may2))

may2[0]=['hi'] #部分赋值;还是原来的对象,只是值有变化

print(id(may2))

may3=['hello',5]

print(id(may3))

may3=['hi',5] #整体重新赋值;may3指向新的对象

print(id(may3))

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

#不可变对象

a=7

a='7' #a指向新的对象,与原对象失去关联

可变对象 可以给对象中的单个元素重新赋值;也可以整体重新赋值

部分赋值的过程:修改对象指定部分的值

整体赋值的过程:新建一个新对象,然后将原"标识符"指向新的对象,原来的对象将被释放

不可变对象是一个整体、不可分割;

不可变对象赋值的过程是:(和可变对象 整体赋值的过程完全相同)

小的整数和字符串在python中被缓存,且在内存中只保留一份

"引用"和"拷贝"的区别,引用类似于指针,指向一个对象

而拷贝是生成一个内容相同的新对象

写在最后,python中一切皆对象,没有变量,只有引用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值