分享2-内存存储
1.值语义和引用语义(在python中使用的是引用语义,传递的所有内容都是传递了“值”的内存地址)
# 整个语言界有两种语义,不同的语言在使用值或者是赋值的时候用的到底是什么
# a = 1
# b = a
#print(id(a),a)
#print(id(b),b)
# 值语义的过程中,相当于这两个a,b的值都是1
# 引用语义的过程中,相当于a指向1的地址,b和a一样也指向a的地址
# 在python中,所有的地方都采用 “引用语义”
# 在python中传递的所有内容都是传递了某一个值得内存地址
# a = [1,2,3]
# b = a
# a和b指向的同一个地址,是同一个列表
# 如果我修改了a,那么b也会跟这变得
# a = [1,2,3]
# b = a a的内存地址赋值给b,这个时候a和b指向同一块内存地址
2.可变数据类型和不可变数据类型
# 不可变数据类型 : int\str\tulpe
#这个类型的值不可以发生改变
#如果变量表示的值发生了改变,并不是说在它引用的内存地址中的值变化了,而是它引用了另外一个值得地址
# int
# a =1
# a = a+1
# a = 2
# str
# tuple
# frozenset 不可变的集合(冷冻的集合)
# 可变数据类型 : 容器,就是一个变量指向的地址是固定的,但是这个地址中的值可以变化(增 删 改)
# list
# l = [1,2,3]
# l.append(4)
# print(l) # l = [1,2,3,4],修改了列表l,l的内存地址没有改变,但列表的值会改变
# dict
# set (集合)
3.列表的扩展方法、字符串的扩展
# index
# extend #在原有的列表上,把每一个元素数据,新加到列表末尾
# append #如果在列表上再加一个列表,就把新列表加到末尾
l = [1,2,3]
l.append([4,5,6])
print(l) #[1, 2, 3, [4, 5, 6]]
l1 = [1,2,3]
l1.extend([4,5,6])
print(l1) #[1, 2, 3, 4, 5, 6]
l = [1,2,3]
print(l.index(3)) #找到值得索引
4.str的扩展方法
# count #统计
# index #对于找不到的值会报错
# find
s = 'abdcadga'
print(s.count('a')) #统计a出现的次数
s = 'abdcadga'
print(s.find('y')) #find找不到数据,不会报错,返回-1
5.三次登录
name = 'alex'
passwd = 'alex3714'
n = 0
while n<3:
print(n)
# 用户输入用户名和密码
username = input('username :')
password = input('password :')
if username == name and password == passwd:
print('登录成功')
break
else:
print('登录失败')
n += 1
else:
print('对不起,三次登录机会已用完')
# 被变量引用的次数可以看到么?
# 可以,有一个内置的python的垃圾回收机制,这里能够看到引用的次数。