垃圾回收机制详解、运算符和格式化输出

目录

  • 垃圾回收机制详解、运算符和格式化输出

    • 一、垃圾回收机制的原理

      • 1 垃圾回收的原则
    • 二、运算符
      • 2.1 算术运算符
      • 2.2 比较运算符
      • 2.3 赋值运算符
      • 2.4 逻辑运算符
      • 2.5 成员运算符
      • 2.6 身份运算符
    • 三、格式化输出
      • 3.1 % 占位符
      • 3.2 str.format()
      • 3.3 f""

垃圾回收机制详解、运算符和格式化输出

一、垃圾回收机制的原理

  当我们定义变量的时候,会申请一块内存空间用来存放变量值,然后利用赋值符号将变量名和变量值绑定在一起,接下来我们在使用变量值得时候就可以通过变量名来找到那块内存空间了。

1 垃圾回收的原则

  引用一般分为直接引用和间接引用。无论是直接引用还是间接引用,当变量值的被引用次数变为o的时候,就会被看做垃圾被系统的垃圾回收机制回收。

1.1 直接引用

  我们直接进行将变量名与变量值绑定关系就被称为直接引用。一个变量值可以被引用很多次。

# 下面的变量都是直接引用
my_love = "美女"
your_love = "护士"
he_love = your_love

1.2 间接引用

当变量值被容器性质的数据类型引用的时候,就是属于间接引用。

your_love = "护士"

# 下方列表的引用属于间接引用
my_loves = ["空姐",your_love]

1.3 标记清除

l1 = [1,2]
l2 = [3,4]
# 两个列表互相引用
l1.append(l2)
l2.append(l1)

# 删除两个列表
del l1
del l2

  上面两个列表变量名在被我们删除以后,变量值互相引用,所以引用次数为1,但是我们却不需要这一块变量值了,这个时候,就用到标记清除了,首先我们要知道,变量名和变量值不在一块空间。

  解释器每隔一段时间扫描一下变量名,然后顺着变量名的绑定关系将变量值进行标记,在全部扫描之后,凡是被顺藤摸瓜的变量值都会存活,而其他未标记的则会被删除

1.4分代回收

  如果解释器抑制不同的扫描会加大内存负担,所以Python内部将变量名分根据权重三个部分,。

  1. 新生代。扫描频率较高,在几次扫描之后依然存在会被送到下一级。
  2. 青春代。扫描频率减少,在几次扫描之后依然存在会被送到下一级。
  3. 老年代。扫描频率继续减少,已经是位高权重的大佬了。

二、运算符

  运算符分为算术运算符、比较运算符、赋值运算符、解压运算符、逻辑运算符、身份运算符、成员运算符。

2.1 算术运算符

  算术运算符就是进行数学运算。

# 加法
print(10+10) 

# 减法
print(10-10)

# 乘法
print(10*10)

# 除法
print(10/10)

# 取整
print(10//10)

# 取余
print(10%10)

2.2 比较运算符

比较运算符 意义
> 大于
>= 大于等于
< 小于
<= 小于等于
!= 不等于
== 等于

2.3 赋值运算符

  复制运算符就是使用等于号 =。有以下几个骚套路。

# 赋值
a = 90 

# 增量赋值.
a += 1  # a = a + 1
a -=1  # a = a - 1
a *=1  # a = a * 1
a /=1  # a = a / 1

# 链式赋值
x = q = 12

# 交叉赋值
w = 12
e = 34
w, e = 34, 12
print(w,e)

# 解压赋值
# 注意,一般都使用 *_ 来匹配不用的变量,约定俗成。
l1 = [1,2,3,4,5]
a, b, c,d ,e = l1[:] # 逐个赋值
*_,e = l1  # 只取末尾赋值

2.4 逻辑运算符

2.5 成员运算符

2.6 身份运算符

三、格式化输出

  格式化输出已拥有三种方式。

3.1 % 占位符

  利用% 来当占位符已经是计算机的传统了。

name = "Tom"
age = 18

# %s 可以接受任何数据类型。

# 按照顺序赋值,必须一一对应。
print("%s is %s." %(name,age) )

# 按照字典的顺序赋值
print("%(name)s is %(age)s." % {"name": "tom","age": 18})

3.2 str.format()

  是字符串的一种方法,括号内可以穿进去参数。推荐使用这个方法。

name = "Tom"
age = 18

# 按照位置传值
print("{} is{}".format(name,age))

# 按照索引传值
print("{1} is {0}".format(age,name))

# 按照字典传值
print("{name} is {age}".format(name="tom",age=18))

3.3 f""

  这个版本是3.5版本之后出现的方法

my_name = "tom"
your_name = "jerry"
res = f"我的名字是{my_name},你的名字是{your_name}"
print(res)

原文地址:https://www.cnblogs.com/liqianxin/p/12421561.html

时间: 2024-10-07 04:52:36

垃圾回收机制详解、运算符和格式化输出的相关文章

JVM的垃圾回收机制详解和调优

JVM的垃圾回收机制详解和调优 gc即垃圾收集机制是指jvm用于释放那些不再使用的对象所占用的内存.java语言并不要求jvm有gc,也没有规定gc如何工作.不过常用的jvm都有gc,而且大多数gc都使用类似的算法管理内存和执行收集操作. 1.JVM的gc概述 gc即垃圾收集机制是指jvm用于释放那些不再使用的对象所占用的内存.java语言并不要求jvm有gc,也没有规定gc如何工作.不过常用的jvm都有gc,而且大多数gc都使用类似的算法管理内存和执行收集操作. 在充分理解了垃圾收集算法和执行

python垃圾回收机制详解

提到"垃圾回收机制"大家都会联想到java的垃圾回收,今天给大家讲的不是java,而是python编程语言(http://www.maiziedu.com/course/python-px/),为何会有垃圾回收机制呢?主要是为了有效的释放内存,所以python采用了一种相对简单的垃圾回收机制,下面就具体介绍python垃圾回收机制: 引用计数 Python默认的垃圾收集机制是"引用计数",每个对象维护了一个ob_ref字段.它的优点是机制简单,当新的引用 指向该对象

PHP的垃圾回收机制详解

最近由于使用php编写了一个脚本,模拟实现了一个守护进程,因此需要深入理解php中的垃圾回收机制.本文参考了PHP手册. 在理解PHP垃圾回收机制(GC)之前,先了解一下变量的存储. php中变量存在于一个zval的变量容器中.结构如下: is_ref 类型 refcount 值 zval中,除了存储变量的类型和值之外,还有is_ref字段和refcount字段. is_ref:是个bool值,用来区分变量是否属于引用集合.什么意思呢,你可以这么认为:表示变量是否有一个以上的别名. refcou

Java垃圾回收机制详解

1. 垃圾回收的意义 在C++中,对象所占的内存在程序结束运行之前一直被占用,在明确释放之前不能分配给其它对象:而在Java中,当没有对象引用指向原先分配给某个对象的内存时,该内存便成为垃圾.JVM的一个系统级线程会自动释放该内存块.垃圾回收意味着程序不再需要的对象是"无用信息",这些信息将被丢弃.当一个对象不再被引用的时候,内存回收它占领的空间,以便空间被后来的新对象使用.事实上,除了释放没用的对象,垃圾回收也可以清除内存记录碎片.由于创建对象和垃圾回收器释放丢弃对象所占的内存空间,

JVM的内存区域划分以及垃圾回收机制详解

在我们写Java代码时,大部分情况下是不用关心你New的对象是否被释放掉,或者什么时候被释放掉.因为JVM中有垃圾自动回收机制.在之前的博客中我们聊过Objective-C中的MRC(手动引用计数)以及ARC(自动引用计数)的内存管理方式,下方会对其进行回顾.而目前的JVM的内存回收机制则不是使用的引用计数,而是主要使用的"复制式回收"和"自适应回收". 当然除了上面是这两种算法外,还有其他是算法,下方也将会对其进行介绍.本篇博客,我们先简单聊一下JVM的区域划分,

Python垃圾回收机制详解转自--Kevin Lu

一.垃圾回收机制 Python中的垃圾回收是以引用计数为主,分代收集为辅.引用计数的缺陷是循环引用的问题. 在Python中,如果一个对象的引用数为0,Python虚拟机就会回收这个对象的内存. #encoding=utf-8 __author__ = 'kevinlu1010@qq.com' class ClassA(): def __init__(self): print 'object born,id:%s'%str(hex(id(self))) def __del__(self): pr

(转)C#垃圾回收机制详解

GC的前世与今生 虽然本文是以.net作为目标来讲述GC,但是GC的概念并非才诞生不久.早在1958年,由鼎鼎大名的图林奖得主John McCarthy所实现的Lisp语言就已经提供了GC的功能,这是GC的第一次出现.Lisp的程序员认为内存管理太重要了,所以不能由程序员自己来管理.但后来的日子里Lisp却没有成气候,采用内存手动管理的语言占据了上风,以C为代表.出于同样的理由,不同的人却又不同的看法,C程序员认为内存管理太重要了,所以不能由系统来管理,并且讥笑Lisp程序慢如乌龟的运行速度.的

JVM内存概况与垃圾回收机制详解

参考:<Java虚拟机精讲> 一.JVM虚拟机内部的内存分布的概况 其中方法区我在博文java虚拟机类加载过程内存情况底层源码分析及ClassLoader讲解中详细讲解过,可参考那篇文章.它里面主要保存:运行时常量池.字段和方法数据.构造函数.普通方法的字节码等. PC寄存器会存储正在执行的字节码指令地址,线程私有 Java栈也为线程私有,生命周期与线程的生命周期一致 二.内存分配 1.分配步骤 当我们创建一个对象时,会经历如下步骤: 根据上面的描述得到下面的图 所以对象是分配在堆的Eden区

Java的内存回收机制详解

http://blog.csdn.net/mengern/article/details/38150431 Java中提供了垃圾强制回收机制的方法System.gc(),但是系统并不保证会立即进行垃圾回收,而是JVM根据定义的一套垃圾回收算法来确定,算法用来提高垃圾回收的效率. 判断一个存储单元是否是垃圾的依据是:该存储单元所对应的对象是否仍被程序所用,即是否有引用指向该对象.Java的垃圾回收器自动扫描对象的动态内存区,对所引用的对象加标记,然后把没有引用的对象作为垃圾收集起来并释放出去. J