Python3学习笔记:Python中的
短信预约 -IT技能 免费直播动态提醒
一、格式
变量 = 对象
二、简述
- Python为动态解释性语言,在赋值操作时,并不需要像静态编译类型语言C、C++或Java一样,在使用变量前,需声明变量的类型。在Python中,类型是在运行过程中自动决定的,而不是通过代码声明。这意味着没有必要事先声明变量。
- 变量和对象之间的关系为引用。
三、解释
变量
- 第一次赋值时,即创建它,之后赋值将会改变变量的值。
- 变量名本身是没有类型的,类型只存在对象中,变量只是引用了对象而已。
- 所有的变量,在使用前必须赋值,使用未赋值的变量会产生错误。
对象
- 对象是有类型的
- 对象是分配的一块内存空间,来表示它的值。
- 每一个对象都具有两个标准的头部信息
- 类型标志符,标识对象的类型
- 引用计数器,用来决定对象是不是进行回收。
引用
- 在Python中从变量到对象的连接称作引用。
- 引用是一种关系,以内存中的指针的形式实现。
- 赋值操作时,自动建立变量和对象之间的关系,即引用。
四、实例说明
1、简单引用
例一
a = 3
步骤说明:
- 创建一个对象来代表值3。
- 创建一个变量a,如果它还没有创建的话。
- 将变量与新的对象3相连接。
a = 3
模型 :
例二
a = 1
a = 'python'
a = 1.2
- 这里的a,被多次赋值,并不是修改的对象,而是修改的引用,a指向1,然后修改引用指向’python’,最后指向1.2。
- 1 和 ‘python’, 被放在内存空间内,在没有其他变量引用时,其引用计数为0,这个对象的内存空间就会自动回收。
- 这里也并不是修改了a的类型,因为变量没有类型,只是它指向的对象具有类型,即对象头部信息的类型标志符。
2、共享引用
例一
a = 3
b = a
a 指向对象3; b = a
,此赋值操作,b也指向3。
例一模型:
例二
a = 3
b = a
a = 'spam'
a 重新指向另一个对象。
例二模型:
3、== 和 is
==
指值相等
is
指地址相等,即指引用相等。
lst1 = [1, 2, 3]
lst2 = lst1
lst3 = [1, 2, 3]
print(lst1, lst2, lst3)
# 执行结果
[1, 2, 3] [1, 2, 3] [1, 2, 3] # 值相等
lst2[0] = 10
print(lst1, lst2, lst3)
# 执行结果
[10, 2, 3] [10, 2, 3] [1, 2, 3] # lst1和lst2发生变化
lst1 = [1, 2, 3]
lst2 = lst1
lst3 = [1, 2, 3]
print(lst1 == lst2)
print(lst1 is lst2)
print(lst1 == lst3)
print(lst1 is lst3)
# 执行结果
True
True
True
False
说明,lst1和lst2指向同一个对象。而lst3则执行另一个对象。两个对象只是值相等。
特殊情况
a = 1
b = a
c = 1
print(a == b)
print(a is b)
print(a == c)
print(a is c)
# 执行结果
True
True
True
True
这里a、b、c都指向同一个对象。
这是因为小的整数和字符串被缓存并复用了,所以is指明a和c是引用了一个相同的对象。
例如
a = 1
a = 'python'
这里的 1 并没有被直接回收,虽然它的计数减一,但是在系统代码中却被大量引用。查看引用计数如下
import sys
print(sys.getrefcount(1))
# 执行结果
4013
五、总结
- 变量是一个系统表的元素,拥有指向对象的连接的空间。
- 对象是分配的一块内存,有足够的空间去表示它们所代表的值。
- 引用是自动形成的从变量到对象的指针。
注: 知识点参考了<<Python 学习手册 第四版>>
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341