Python动态类型简单介绍
动态类型以及它提供的多态性,无疑是Python语言简洁性和灵活性的基础。
一、变量
<1>变量创建
一个变量a。当代码第一次给它赋值时就创建了它,之后的赋值将会改变已创建的变量名的值。
<2>变量类型
变量永远不会有不论什么的和它关联的类型信息或约束。变量原本是通用的。它仅仅是在一个特定的时间点,简单的引用了
一下特定的对象而已。
<3>变量使用
当变量出如今表达式中。它会立即被当前引用的对象所替代(对象是有类型的)。此外全部的变量必须在使用前明白的
赋值,使用未赋值的变量会错误发生。
总而言之。变量在赋值时才创建。它能够引用不论什么类型的对象,而且必须在引用前赋值。
比如 a = 3
会经历三个步骤:
<1>创建一个对象来代表值3
<2>创建一个变量a
<3>将变量与新的对象相连接
因此可得
对象是分配的一块内存。有足够的空间去表示它们所代表的值。
变量是一个系统表的元素,拥有指向对象的连接的空间。
引用是自己主动形成的从变量到对象的指针。
二、类型属于对象。而不是变量
对一个变量多次赋值得,
>>> a = 3
>>> a = 'hello'
>>> a = 3.1415
由此可见变量名是没有类型的,而类型是属于对象的。
我们对a的改动仅仅是让它成为不同对象的引用。
对象是有类型
的。整数对象3包括值3以及一个头部信息,告诉python这是一个整数类型。
三、对象的垃圾收集
在python中,当一个变量名被赋予一个新的对象,之前的那个对象占用的空间就会被回收(假设它没有被其它变量引
用)。称为垃圾收集。
在内部python是这样来实现这一功能的:
它在每一个对象中保持了一个计数器,记录了当前指向该对象的引用的数目,一旦这个计数器的值为0,这个对象的内
存空间会自己主动回收。
这意味着不须要考虑内存释放等问题,省去大量的基础代码。
四、共享引用
例:
>>> a = 3
>>> b = a
此时a,b都成为对象3的一个引用,叫做共享引用。
>>> a = 'hello'
当a改变时。这时不会改变b的值,仅仅是a改动为'hello'的引用而已。
给变量赋一个新的值。不是替换了原始的变量,而是让这个变量去引用全然不同的还有一个对象,效果就像又一次赋值一
样,仅仅会影响被赋值的变量。
五、共享引用和原处改动
有一些对象和操作确实会在原处改变对象,比如之前写过的"Python<1>list",进行一些操作时不是生成一个新的对
象,而是直接改动了自身引用的对象,此时共享引用须要加倍小心。假设你不想要这种现象发生。须要python拷贝
对象。而不是创建引用。最常见的办法就是从头到尾的分片。
>>> L1 = L2[:]
此时对当中一个的改动不会影响还有一个。两个对象在不同的内存区域。
參考<<learning python>>
Python动态类型简单介绍的更多相关文章
- python动态类型
在python中,省去了变量声明的过程,在引用变量时,往往一个简单的赋值语句就同时完成了,声明变量类型,变量定义和关联的过程,那么python的变量到底是怎样完成定义的呢? 动态类型 python使用 ...
- python之pandas简单介绍及使用(一)
python之pandas简单介绍及使用(一) 一. Pandas简介1.Python Data Analysis Library 或 pandas 是基于NumPy 的一种工具,该工具是为了解决数据 ...
- python+selenium之简单介绍继承
python+selenium之简单介绍继承 一.此例简单的介绍一下继承 1.面向对象的编程带来的主要好处之一是代码的重用,实现这种重用的方法之一是通过继承机制.继承完全可以理解成类之间的类型和子类型 ...
- 【Python】python动态类型
在python中,省去了变量声明的过程,在引用变量时,往往一个简单的赋值语句就同时完成了,声明变量类型,变量定义和关联的过程,那么python的变量到底是怎样完成定义的呢? 动态类型 python使用 ...
- python shutil模块简单介绍
python shutil模块简单介绍 简介 shutil模块提供了大量的文件的高级操作.特别针对文件拷贝和删除,主要功能为目录和文件操作以及压缩操作. shutil 模块方法: copy(src, ...
- Python -- Scrapy 框架简单介绍(Scrapy 安装及项目创建)
Python -- Scrapy 框架简单介绍 最近在学习python 爬虫,先后了解学习urllib.urllib2.requests等,后来发现爬虫也有很多框架,而推荐学习最多就是Scrapy框架 ...
- Python+selenium之简单介绍unittest单元测试框架
Python+selenium之简单介绍unittest单元测试框架 一.unittest简单介绍 unittest支持测试自动化,共享测试用例中的初始化和关闭退出代码,在unittest中最小单元是 ...
- python numpy 模块简单介绍
用python自带的list去处理数组效率很低, numpy就诞生了, 它提供了ndarry对象,N-dimensional object, 是存储单一数据类型的多维数组,即所有的元素都是同一种类型. ...
- python paramiko 模块简单介绍
背景,公司的很多服务包括数据库访问都需要通过跳板机访问,为日常工作及使用带来了麻烦,特别数python直接操作数据更是麻烦了,所以一直想实现python 通过跳板机访问数据库的操作. 首先了解到了 p ...
随机推荐
- NPOI2.0导出excel之添加样式、边框和表头
//优化后导出excel public System.IO.Stream ExcelStream(string search) // { var orderBusiniss = Containers. ...
- vue 中的 ... (三个点的用法)
这个是扩展运算符. 扩展语法.对数组和对象而言,就是将运算符后面的变量里东西每一项拆下来.这个东西可以在函数定义的地方使用,比如使用func(...args)将函数传入的参数都放到args数组里.
- Java——socket
Server: import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; public cla ...
- inventor安装错误
AUTODESK系列软件着实令人头疼,安装失败之后不能完全卸载!!!(比如maya,cad,3dsmax等).有时手动删除注册表重装之后还是会出现各种问题,每个版本的C++Runtime和.NET f ...
- 性能测试工具LoadRunner14-LR之Controller 简介
当虚拟用户开发完成之后,使用Controller将这个执行脚本的用户从单用户转化为多用户,从而模拟大量用户操作,进而形成负载.(多用户单循环,多用户多循环)我们需要对负载模拟的方式和特征进行配置. 场 ...
- ubuntu 16.04安装后不能登入
启动后,选择ubuntu高级选项,选择恢复模式,在恢复模式下 sudo apt-get update sudo apt-get upgrade 另外,可以在此模式下,选择nvidia驱动
- OpenStack Weekly Rank 2015.07.27
Module Reviews Drafted Blueprints Completed Blueprints Filed Bugs Resolved Bugs Cinder 7 1 1 7 10 Sw ...
- [一点一滴.NET]进程和线程的区别
进程是“执行中的程序”,是一个动态的概念.我们使用IDE编写的程序是静态的,静态程序经过编译形成EXE文件,运行起来之后就形成了一个进程.进程不仅仅是程序的代码,还包含了程序运行时的活动信息,通常由程 ...
- .NET面试题4
常见面试题目: 1.字符串是引用类型类型还是值类型? 2.在字符串连接处理中,最好采用什么方式,理由是什么? 3.使用 StringBuilder时,需要注意些什么问题? 4.以下代码执行后内存中会存 ...
- Day5下
T1 #include<iostream> #include<cstring> #include<cstdio> #include<algorithm> ...