Python动态类型实现原理及过程解析

在python中,我们使用变量时,并没有声明变量的存在和类型。类型是在运行过程中自动决定的。

a = 3

python将会执行三步去完成上面这个请求。

1.创建一个对象代表3

2.创建一个变量a,如果a未创建。

3.将变量a与对象3相连接。

可以将变量a看作对象3的一个引用。

a = 3
b = a

多个变量可以指向同一个对象,在Python中叫共享引用。

Python在每个对象中保持了一个计数器,用于记录当前指向该对象的引用的数目,一旦计数器被设置为0,该对象的内存空间就会自动回收。

原处修改对象

由于共享引用的存在,有一些对象和操作会在原处修改对象。

Python中对象可分为可变类型对象和不可变类型对象。

可变对象:列表,字典

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

如果变量是不可变对象的引用,对变量名的修改不会影响其他变量,而是直接连接到修改的对象。

a = 3
b = a
print(a)# 3
print(b)# 3

a = 4
print(a)# 4
print(b)# 3

如果变量是可变对象的引用,对变量名的修改会影响其他变量。

a = [1,2,3]
b = a
print(a)# [1, 2, 3]
print(b)# [1, 2, 3]

a[0] = 4
print(a)# [4, 2, 3]
print(b)# [4, 2, 3]

拷贝

所以当你需要创建一个与原列表一样同时又独立于原列表的列表时,可以使用拷贝。

下面介绍最常用的两种。

a = [1,2,3]
b = a[:]
print(a)# [1, 2, 3]
print(b)# [1, 2, 3]

a[0] = 4
print(a)# [4, 2, 3]
print(b)# [1, 2, 3]

此时b引用的是a所引用的对象的拷贝。a,b指向不同的内存区域。

在字典和集合中,无法使用这种方法。

可以使用标准库中的copy模块

import copy

a = [1,2,[3]]
b = copy.copy(a)# 浅拷贝
c = copy.deepcopy(a)# 深拷贝

a[0] = 0
a[-1].append(4)

print(a)# [0, 2, [3, 4]]
print(b)# [1, 2, [3, 4]]
print(c)# [1, 2, [3]]

浅拷贝中可变对象中嵌套的可变对象的引用还是原来的引用。

深拷贝可以拷贝嵌套的对象结构。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Python动态语言与鸭子类型详解

    今天来说说编程语言中的动态类型语言与鸭子类型. 动态语言 维基百科对动态语言的定义: 动态编程语言是一类在运行时可以改变其结构的语言:例如新的函数.对象.甚至代码可以被引进,已有的函数可以被删除或是其他结构上的变化.动态语言目前非常具有活力如PHP.Ruby.Python 都属于动态语言,而C.C++.Java等语言则不属于动态语言. 这个解释很抽象,其实动态语言是相对静态语言而言的,静态语言的特点是在程序执行前,代码编译时从代码中就可以知道一切,比如变量的类型,方法的返回值类型: String

  • Python动态强类型解释型语言原理解析

    PYTHON是一门动态解释性的强类型定义语言:编写时无需定义变量类型:运行时变量类型强制固定:无需编译,在解释器环境直接运行. 动态和静态 静态语言:是指在编译时变量的数据类型即可确定的语言,多数静态类型语言要求在使用变量之前必须声明数据类型.例如:C++.Java.Delphi.C# .go等. 动态语言:是在运行时确定数据类型的语言.变量使用之前不需要类型声明,通常变量的类型是被赋值的那个值的类型.例如:Python.Ruby.Perl等. 强类型和弱类型 强类型和弱类型主要是站在变量类型处

  • python动态性强类型用法实例

    本文实例分析了python动态性强类型用法.分享给大家供大家参考.具体如下: Python变量声明和定义 与C#不同,Python在使用变量之前无须定义它的类型,试着运行下面的例子: i = 12 print i 从上边我们可以看到,变量 i 在使用前并不需要定义,但是必须声明以及初始化该变量.试着运行下面的例子: i = 1 print i + j 上面的代码会产生一个异常:"NameError: name 'j' is not defined",Python提示变量 j 没有定义.

  • Python绘制动态水球图过程详解

    先来看看绘制的动态水球图: 没有安装PyEcharts的,先安装PyEcharts: # 安装pyecharts模块,直接安装就是最新的版本pip install pyecharts 安装好PyEcharts之后,就可以将需要使用的模块进行导入: from pyecharts import options as optsfrom pyecharts.charts import Liquid 水球图数据很简单,就是一个完成率数字,所以不用定义或导入,也无需做转换. 接下来就可以绘制水球图了: c

  • 基于Python绘制美观动态圆环图、饼图

    前言 本文采用PyEchartsv1.x版本进行绘制地图. 注:PyEcharts分为 v0.5.x 和 v1.x 两个大版本,v0.5.x 和 v1.x 间不兼容,v0.5.x是基于Python2.7+.3.4+版本开发的,而v1.x是一个全新的版本,它是基于Python3.6+版本开发的,另外经PyEcharts开发团队决定,0.5.x 版本将不再进行维护. 绘制的饼图效果是这样的: 没有安装PyEcharts的,先安装PyEcharts: 安装好PyEcharts之后,就可以将需要使用的模

  • Python实现爬取网页中动态加载的数据

    在使用python爬虫技术采集数据信息时,经常会遇到在返回的网页信息中,无法抓取动态加载的可用数据.例如,获取某网页中,商品价格时就会出现此类现象.如下图所示.本文将实现爬取网页中类似的动态加载的数据. 1. 那么什么是动态加载的数据? 我们通过requests模块进行数据爬取无法每次都是可见即可得,有些数据是通过非浏览器地址栏中的url请求得到的.而是通过其他请求请求到的数据,那么这些通过其他请求请求到的数据就是动态加载的数据.(猜测有可能是js代码当咱们访问此页面时就会发送得get请求,到其

  • Python调用.net动态库实现过程解析

    pythonnet简介 pythonnet是cpython的扩展 pythonnet提供了cpython和.net程序集之间交互的桥梁 pythonnet开源在github上 pythonnet安装 通过pip install pythonnet安装 pythonnet的使用帮助 pythonnet的使用帮助,请参见github. pythonnet中的坑 cpython是分32和64位的,对应的pythonnet也是分的,版本要对应好 pythonnet最核心的就是python.Runtime

  • python进阶教程之动态类型详解

    动态类型(dynamic typing)是Python另一个重要的核心概念.我们之前说过,Python的变量(variable)不需要声明,而在赋值时,变量可以重新赋值为任意值.这些都与动态类型的概念相关. 动态类型 在我们接触的对象中,有一类特殊的对象,是用于存储数据的.常见的该类对象包括各种数字,字符串,表,词典.在C语言中,我们称这样一些数据结构为变量.而在Python中,这些是对象. 对象是储存在内存中的实体.但我们并不能直接接触到该对象.我们在程序中写的对象名,只是指向这一对象的引用(

  • Python动态类型实现原理及过程解析

    在python中,我们使用变量时,并没有声明变量的存在和类型.类型是在运行过程中自动决定的. a = 3 python将会执行三步去完成上面这个请求. 1.创建一个对象代表3 2.创建一个变量a,如果a未创建. 3.将变量a与对象3相连接. 可以将变量a看作对象3的一个引用. a = 3 b = a 多个变量可以指向同一个对象,在Python中叫共享引用. Python在每个对象中保持了一个计数器,用于记录当前指向该对象的引用的数目,一旦计数器被设置为0,该对象的内存空间就会自动回收. 原处修改

  • Python生命游戏实现原理及过程解析(附源代码)

    1. 生命游戏是什么 生命游戏是英国数学家约翰·何顿·康威在1970年发明的细胞自动机.它包括一个二维矩形世界,这个世界中的每个方格居住着一个活着的或死了的细胞.一个细胞在下一个时刻生死取决于相邻八个方格中活着的或死了的细胞的数量.如果相邻方格活着的细胞数量过多,这个细胞会因为资源匮乏而在下一个时刻死去:相反,如果周围活细胞过少,这个细胞会因太孤单而死去. 规则看起来很简单,但却能演绎出无穷无尽的内容. 滑翔者:每4个回合"它"会向右下角走一格.虽然细胞早就是不同的细胞了,但它能保持原

  • Python自定义计算时间过滤器实现过程解析

    这篇文章主要介绍了Python自定义计算时间过滤器实现过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 在写自定义的过滤器时,因为django.template.Library.filter()本身可以作为一个装饰器,所以可以使用: register = django.template.Library() @register.filter 代替 register.filter("过滤器名","函数名") 如果

  • Python socket模块ftp传输文件过程解析

    这篇文章主要介绍了Python socket模块ftp传输文件过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 使用环境:python3,window环境,需要在头部声明# -*- coding:utf-8 -*- 实现功能: 将sever端所处文件夹的文件,传输到client端所处的文件夹中. 并且通过md5检测是否出错. 客户端命令的形式是: get 文件名 client处的新文件是 文件名.new ftp_sever.py impo

  • Python使用微信接入图灵机器人过程解析

    这篇文章主要介绍了Python使用微信接入图灵机器人过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1.wxpy库介绍 wxpy 在 itchat 的基础上,通过大量接口优化提升了模块的易用性,并进行丰富的功能扩展. 文档地址: https://wxpy.readthedocs.io 从 PYPI 官方源下载安装 pip install -U wxpy 2.图灵机器人 首先注册一个账号:http://www.turingapi.com/

  • python redis 批量设置过期key过程解析

    这篇文章主要介绍了python redis 批量设置过期key过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 在使用 Redis.Codis 时,我们经常需要做一些批量操作,通过连接数据库批量对 key 进行操作: 关于未过期: 1.常有大批量的key未设置过期,导致内存一直暴增 2.rd需求 扫描出这些key,rd自己处理过期(一般dba不介入数据的修改) 3.dba 批量设置过期时间,(一般测试可以直接批量设置,线上谨慎操作) 通过

  • Python散点图与折线图绘制过程解析

    这篇文章主要介绍了Python散点图与折线图绘制过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 在数据分析的过程中,经常需要将数据可视化,目前常使用的:散点图 折线图 需要import的外部包 一个是绘图 一个是字体导入 import matplotlib.pyplot as plt from matplotlib.font_manager import FontProperties 在数据处理前需要获取数据,从TXT XML csv

  • python Opencv计算图像相似度过程解析

    这篇文章主要介绍了python Opencv计算图像相似度过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 一.相关概念 一般我们人区分谁是谁,给物品分类,都是通过各种特征去辨别的,比如黑长直.大白腿.樱桃唇.瓜子脸.王麻子脸上有麻子,隔壁老王和儿子很像,但是儿子下巴涨了一颗痣和他妈一模一样,让你确定这是你儿子. 还有其他物品.什么桌子带腿.镜子反光能在里面倒影出东西,各种各样的特征,我们通过学习.归纳,自然而然能够很快识别分类出新物品.

  • python爬虫模拟浏览器访问-User-Agent过程解析

    这篇文章主要介绍了python爬虫模拟浏览器访问-User-Agent过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 模拟浏览器访问-User-Agent: import urllib2 #User-Agent 模拟浏览器访问 headers = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, li

  • python实现百度OCR图片识别过程解析

    这篇文章主要介绍了python实现百度OCR图片识别过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 代码如下 import base64 import requests class CodeDemo: def __init__(self,AK,SK,code_url,img_path): self.AK=AK self.SK=SK self.code_url=code_url self.img_path=img_path self.ac

随机推荐