分享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.可变数据类型和不可变数据类型

# 不可变数据类型 : intstr	ulpe
#这个类型的值不可以发生改变
#如果变量表示的值发生了改变,并不是说在它引用的内存地址中的值变化了,而是它引用了另外一个值得地址
      # 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的垃圾回收机制,这里能够看到引用的次数。
原文地址:https://www.cnblogs.com/yihutu/p/11462479.html