内存管理以及数据类型

一.内存管理

1.Cpython解释器的垃圾回收机制

什么是垃圾:当一个值身上没有人绑定任何变量名(该值的引用计数=0)时,该值就是一个垃圾。 Cpython解释器就会自动回收这样的垃圾。

#引用计数增加

#age=18 # 18的引用计数=1

#x=age   #  18的引用计数=2

#引用计数减少

#age=19 # 18的引用计数=1

#del x     #  18的引用计数=0

2.变量值的三个特征:

id:反映的内存地址  # age=18

type::数据类型       # print(id(age))

值:数据                  # orint(age)

总结:id相同,值一定相同;值相同,id可以不同。

例:x=‘my name is wangke‘

y=‘my name is wangke‘

print(id(x),id(y))

# 40702000  40702216

3. is 与 ==

==:值是否相等

is  :id是否相等

4.可变类型与不可变类型

不可变类型:值改变,id也变,证明根本不是在改变原值,是创建了新值,原值就是不可变类型

例:x=10

print(id(x))

x=11

print(id(y))

# 1435266816

1435266848

可变类型:值改变,id不变,证明就是在改变原值,原值是可变类型

例:l=[‘a‘,‘b‘,‘c‘]

print(id(l))

l[0]=‘A‘

print(id(l))

# 35398664

35398664

二.python2中与用户交互

1.在python3中只有一个input:

特点:会把用户输入的任意内容都存成str类型

2.在python2中只有一个raw_input,与python3中的input一模一样,而python2中的input要求用户必须输入一个明确的类型,输入什么类型就存成什么类型

三.数据类型的基本使用

1.整型int

作用:用来记录等级、年龄、好号码等状态

定义:age=10  # age=int(10)

使用:

print(age+1)

print(age>3)

2.浮点型float

作用:用来记录身高、体重、工资等状态

定义:salary=3.5 # salary=float(3.5)

使用:

print(3.1+3.4)

print(3.1<3.4)

print(3.1>2)

3.字符串类型str

作用:用来记录描述性质状态,比如名字、性别

定义:在单引号(‘ ‘),双引号(“ ”),三引号(‘ ‘ ‘   ‘ ‘ ‘ ," " "  " " ")内包含一系列的字符

使用:print(‘abc‘+‘def‘) # 仅限字符串相加

print(‘abc‘*10)     # 相乘的只能是数字

4.列表类型list

作用:用来记录多个值,用索引对应值,索引反映位置

定义:在[ ]内用逗号分隔开多个任意类型的值

l=[1,3.1,‘xxx‘,[‘a‘,‘b‘,‘c‘]]  # l=list(...)

使用:# print(l[0])

# print(l[3][0])

5.字典类型dict

作用:用来记录多个值,用key对应value,其中key对value有描述性的功能
       定义:在{}内,用逗号分割开多元素,每一个元素都是key:value的形式,其中value可以是任意类型,而key通常应该是str类型
                d={‘x‘:1,‘y‘:3.1,‘z‘:[‘a‘,‘b‘],‘m‘:{‘aaa‘:1111}} #d=dict(...)
                print(type(d))
      使用:
                print(d[‘x‘])
                print(d[‘m‘][‘aaa‘])
                print(d[‘z‘][1])

列表与字典的应用:在多个值是同种类型的时候用列表,在多个值是不同种类型的时候用字典。

6.布尔类型:True,Flase

所有数据类型都自带布尔值

布尔值为假的数据类型:0,None,空

7. None

# print(type(None))

四.基本运算符

1.比较运算符
         > >=
         < <=
         ==
         !=
         print(10 != 11)

# l1=[‘abc‘,1,[‘a‘,‘b‘,‘c‘]]

         # l2=[‘abc‘,‘aa‘,]

         # print(l2 > l1)

2. 逻辑运算符
               and:连接左右两个条件,只有两个条件同时成立时and运算的结果为True
                        print(10 > 9 and 3 > 2 and ‘egon‘ == ‘egon‘ and True)

or:连接左右两个条件,两个条件成立任意一个or运算的结果就为True
                        print(False or False or True or False or 3 > 10)

res=(True or (False and True)) or ((False or True) and False)
                        res=(True or False) or (True and False)
                        res=True or False
                        print(res)

not:
                        print(not 10 > 3)

x=None
                        print(x is not None)

# age1=18
                        # age2=19
                        # print(age2 is not age1)

练习:
name_bk=‘egon‘
pwd_bak=‘123‘
name=input(‘please input your name: ‘)
pwd=input(‘please input your password: ‘)
if name == name_bk and pwd == pwd_bak:
    print(‘login successfull‘)
else:
    print(‘username or password error‘)

原文地址:https://www.cnblogs.com/wangke0917/p/9983587.html

时间: 2024-11-06 12:44:34

内存管理以及数据类型的相关文章

OC学习总结4 内存管理

内存管理 基本数据类型(int,float,double,char,struct,enum)的数据内存不需要内存管理 1 对象的内存管理 诞生 alloc或new或copy 生存 接收消息和执行操作 交友 借助方法的组合和参数,调用方法 销毁 内存被释放 delloc:相当于被释放内存的临终遗言,每个内存被销毁之前都会调用dealloc方法 2 引用计数 1 Cocoa采用引用计数也叫作保留计数 2 alloc new copy 用这三个方法创建对象时,对象的引用计数器为1 3 retain 给

OC内存管理-1

栈区:从高到低分配 堆区:从低到高 BSS段:没有初始化的 数据区: 代码段: OC内存管理方式: 1 MRC 手动内存管理 2 ARC 自动内存管理 nil是给对象赋空值 下个有道云笔记 内存管理 一.总结: 1.只有OC对象才需要内存管理,基本数据类型无效 2.OC对象存放在堆里面 3.非OC对象一般放在栈里面(栈内存会被系统自动回收) 二.引用计数器: 1.每个OC对象都有自己的引用计数器 2.它是一个整数(int) 3.表示有多少人正在使用这个对象 4.每个OC对象都有4个字节的存储空间

内存管理,数据类型的基本使用与基本运算符(python2中与用户交互)

1.CPython解释器的垃圾回收机制什么是垃圾: 当一个值身上没有绑定任何变量名(该值的引用计数=0)时,该值就是一个垃圾 引用计数增加 age=18   #18的引用计数等于1x=age     #18的引用计数等于2 引用计数减少 age=19   #18的引用计数等于1 del   x  #18的引用计数等于0 2.变量值的三个特征: id: 反映的是内存地址 type: 数据类型 age=18 print(id(age)) print(type(age)) print(age) 总结:

OC内存管理

OC内存管理 一.基本原理 (一)为什么要进行内存管理. 由于移动设备的内存极其有限,所以每个APP所占的内存也是有限制的,当app所占用的内存较多时,系统就会发出内存警告,这时需要回收一些不需要再继续使用的内存空间,比如回收一些不再使用的对象和变量等. 管理范围:任何继承NSObject的对象,对其他的基本数据类型无效. 本质原因是因为对象和其他数据类型在系统中的存储空间不一样,其它局部变量主要存放于栈中,而对象存储于堆中,当代码块结束时这个代码块中涉及的所有局部变量会被回收,指向对象的指针也

linux内核探索之内存管理(四):对页表和页表项的操作

接上一节,主要参考<深入Linux内核架构>(3.3节),即linux-3.18.3 1. 对PTE的操作 最后一级页表中的项不仅包含了指向页的内存位置的指针,还在上述的多于比特位包含了与页有关的附加信息.尽管这些数据是特定于CPU的,它们至少提供了有关页访问控制的一些信息.下列位在linux内核支持的大多数CPU中都可以找到. arch/x86/include/asm/pgtable_types.h #define _PAGE_BIT_PRESENT 0 /* is present */ #

(转)从内存管 理、内存泄漏、内存回收探讨C++内存管理

http://www.cr173.com/html/18898_all.html 内存管理是C++最令人切齿痛恨的问题,也是C++最有争议的问题,C++高手从中获得了更好的性能,更大的自由,C++菜鸟的收获则是一遍一遍的检查代码和对 C++的痛恨,但内存管理在C++中无处不在,内存泄漏几乎在每个C++程序中都会发生,因此要想成为C++高手,内存管理一关是必须要过的,除非放弃 C++,转到Java或者.NET,他们的内存管理基本是自动的,当然你也放弃了自由和对内存的支配权,还放弃了C++超绝的性能

【读书笔记】C#高级编程 第十四章 内存管理和指针

(一)后台内存管理 1.值数据类型 Windows使用一个虚拟寻址系统,该系统把程序可用的内存地址映射到硬件内存中的实际地址,该任务由Windows在后台管理(32位每个进程可使用4GB虚拟内存,64位更多,这个内存包括可执行代码和加载的DLL,以及程序运行时使用的变量内容). 在处理器的虚拟内存中,有一个区域称为栈.栈存储不是对象成员的值数据类型. 释放变量时,其顺序总是与它们分配内存的顺序相反,这就是栈的工作方式. 程序第一次运行时,栈指针指向为栈保留的内存块末尾.栈实际上是向下填充的,即从

JVM内存管理

物理内存和虚拟内存 (1)在java中,分配内存和回收内存都由JVM自动完成,甚至不需要写和内存相关的代码(2)物理内存即RAM还有寄存器(一种存储单元,用于存储计算机单元执行指令(如整形浮点等运算)的中间结果)是处理器通过地址总线连接的.地址总线:其宽度决定了一次可以存寄存器或者RAM中获取多少个bit和处理器最大的可以寻址的范围,每个地址会引用一个字节,所以如果是32位的总线则可以有4G的内存空间.(通常情况下地址总线和RAM或寄存器有相同的位数)(3)通常操作系统的内存申请空间是按照进程来

IOS基础之 (十) 内存管理

一 基本原理 1.什么是内存管理 移动设备的内存有限,每个app所能占用的内存是有限制的. 当app所占用的内存较多时,系统会发出内存警告,这时得回收一些不需要再使用的内存空间.比如回收一些不需要使用的对象,变量. 管理范围:任何继承了NSObject,对其他基本数据类型(int, char, float, double,struct,enum等)无效. 2.对象的基本结构 每个OC对象都有自己的引用计数器,是一个整数,表示"对象被引用的次数",即有多少个类正在使用这个OC对象. 每个