python学习整理(一) :python中的对象与变量

本文介绍了Python中的对象概念,包括标识、类型和值,并探讨了引用的本质,指出变量存储的是对象地址。此外,还讲解了Python中标识符的命名规则,强调了动态和强类型特性。最后,阐述了变量声明、初始化、删除以及垃圾回收机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    python中,一切皆对象。每个对象由:标识(id),类型(type),值(value)组成。

   1.标识用于唯一标识对象,通常对应于对象在内存中的地址。使用内置函数 id(obj) 可返回对象obj的标识。

   2.类型用于返回对象存储的数据类型。类型可以限制对象的取值范围以及可执行的操作。可以使用 type(obj) 获取所属对象的类型。

   3.值表示对象存储的数据的信息,可以使用 print(obj) 打印对象的值。

   对象的本质:一个内存块,拥有特定的值,支持特定类型的相关操作。

 

 

  • 引用的本质

    在python中,变量实际上就是对象的引用。也就是说,变量存储的实际上是对象的地址,变量通过地址引用了对象。

    变量位于栈内存。

    对象位于堆内存。

    python是动态类型语言,不需要显式声明变量的类型,根据变量引用的对象,python解释器自动确定数据类型。

    python是强类型语言,每个对象都有数据类型,且只支持该类型的支持的方法。

a=3
id(a)
Out[1]: 1896181280

b=3
id(b)
Out[2]: 1896181280

type(3)
Out[3]: int

type(a)
Out[4]: int
#可以看到,变量a与b实际上只是‘3’这个int类型对象的引用

c=a
a=a+1
print(id(a))
print(id(c))
Out[6]:1896181312
       1896181280
#这个例子可以看到,python中的赋值运算符实际上是将新的变量c指向了最初的实例对象,实例对象与c之间的桥梁a的改变似乎并不会影响c。这叫做链式赋值,相当于a=3,c=3.

 

 

  • 标识符

  • 基本用法

  1. 区分大小写。
  2. 第一个字符必须是字母或者下划线,其后的字符必须是字母,数字,下划线。如:_a,asd,a11。
  3. 不能使用关键字,例如:if,while,for等等。
  4. 以双下划线为开头和结尾的名称通常含有特殊意义,尽量避免这样的写法,例如:__init__ 是类的构造函数。

     tip:可以使用 help()+keywords 查找python中的关键字信息。具体如下:

help()

Out[1]:Welcome to Python 3.6's help utility!

If this is your first time using Python, you should definitely check out
the tutorial on the Internet at http://docs.python.org/3.6/tutorial/.

Enter the name of any module, keyword, or topic to get help on writing
Python programs and using Python modules.  To quit this help utility and
return to the interpreter, just type "quit".

To get a list of available modules, keywords, symbols, or topics, type
"modules", "keywords", "symbols", or "topics".  Each module also comes
with a one-line summary of what it does; to list the modules whose name
or summary contain a given string such as "spam", type "modules spam".

help>



#####输入“keywords”

help> keywords

Out[2]:Here is a list of the Python keywords.  Enter any keyword to get more help.

False               def                 if                  raise
None                del                 import              return
True                elif                in                  try
and                 else                is                  while
as                  except              lambda              with
assert              finally             nonlocal            yield
break               for                 not                 
class               from                or                  
continue            global              pass
  • 开发中标识符命名规则

 类型规则例子
模块和包名全小写字母,尽量简单,多个单词之间用下划线math,os,sys
函数名全小写字母,多个单词之间用下划线隔开get_value,max
类名首字母大写,采用驼峰原则。Student, MyClass
常量名全大写字母,单词之间用下划线隔开MAX_INT

 

 

  • 变量的声明_初始化_删除_垃圾回收机制

  • 变量的声明和赋值

python中变量的声明和赋值相当于将一个变量绑定到一个对象上,格式如下:变量名=表达式

最简单的赋值语句就是  a=11。在运行过程中,python解释器先运行赋值运算符右边的表达式,生成一个代表表达式运算结果的对象 11,然后将这个对象的地址赋值给变量 ,变量 就成了对象 11 的一个引用。

链式赋值语句b=a=11;     a=11,b=a;  相当于语句 b=11,a=11

                            注意不能写成 b=a,a=11;变量在使用前必须先被初始化,也就是要先被赋值。

#############链式赋值语句############
b=a=11

id(b)
Out[2]: 1896181536

id(a)
Out[3]: 1896181536
#可以看到,b和a都是对象11的一个引用


#下面我们让a改变
a=a+1

a
Out[5]: 12

b
Out[6]: 11

id(a)
Out[7]: 1896181568

id(b)
Out[8]: 1896181536
#可以发现,a的改变并不能影响b,所以链式赋值语句中,b也是直接指向最初的实例对象。

系列解包赋值:系列数据赋值给相同个数的变量。

#系列解包赋值
a,b,c=11,'sd',23.0

a
Out[10]: 11

b
Out[11]: 'sd'

c
Out[12]: 23.0


#如果个数不相同会报错
a,b,c=11
Traceback (most recent call last):

  File "<ipython-input-13-6e560dbcb2f1>", line 1, in <module>
    a,b,c=11

TypeError: 'int' object is not iterable
#报错内容是‘int’类型不是一个可迭代对象,也就是说,等号右边只要是一个可迭代对象,且这个可迭代对象的可迭代次数等于等号左边变量的个数,这个系列解包赋值语句就能成功运行。变量赋值实际上就是可迭代对象迭代时返回的值。


#下面展示两个例子:
#例子一:
a,b,c=[11,1,23]

a
Out[16]: 11

b
Out[17]: 1

c
Out[18]: 23

#例子二:
a,b,c={'a':12,'b':13,'c':'asd'}

a
Out[24]: 'a'

b
Out[25]: 'b'

c
Out[26]: 'c'
  • 删除变量和垃圾回收机制

通过 del 语句可以删除不在使用的变量。

如果对象没有被引用,就会被垃圾回收器回收,清楚内存空间。但这个垃圾回收机制并不是及时的,如果某个对象引用变为0,它所占用的内存空间并不会立即被释放,而是经过一段时间后才会被释放,这个机制暂时还不清楚,望能指正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值