发牌_兼温故可变对象问题

简介

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
# coding:utf-8

import sys
sys.path.append('/Users/chenyushao/Desktop/python_draft/python基础知识第3版')
fromimport *

# while deck:

# input(deck.pop()) # 等于手输入一个deck.pop的值。按enter键进入下一步的循环。

# # 这里说明一下,input(),这个()内的不打引号的内容,

# # 相当于在终端手输入的内容。







# 以下与发牌无关,纯粹来温习可变对象知识。

deck_1 = deck

# deck[1:] = '000' # 因为deck是list,可变对象,对其中一个索引内容变化后,所有相关赋值变量跟着变。

deck = ['a','b','c'] # 虽然deck是可变对象,但是这样的重新赋值操作不会让所有相关赋值变量跟着变。
print('deck_1 is :',deck_1)
print(deck)

print('~~~~~~~~~ \n')

a = [1,2,3]
print('a id:',id(a))
b = a
a = [2,4,5]
print('b id:',id(b))
print('a 再赋值后的 id:',id(a))
print(b)

aa = [1,2,3]
print('aa id:',id(aa))
bb = aa
aa[0] = 100
print('bb id:',id(bb))
print('aa 修改后的id :',id(aa))
print(bb)

# 总结 : 可变对象的赋值都是某个 内存中对象的id传递给变量 而已,

# 而内存中对象的value值是可以通过索引操作单独改变的,

# 因此,出现一旦内存中可变对象value值改变,同一条id链上的

# 变量值都跟着变。

# (需要注意a = 10,a = 20,这样的两个赋值

# 语句,是在内存中的 int10对象 与 int20对象 分别传递id的操作,

# 对象10、对象20的id 是不同的。)

a_ = 5
print('a ID is :' ,id(a_))
b_ = a_
print('b id is :',id(b_))
c_ = 5
print('c id is :',id(c_))
d_ = 5
print('d id is :',id(d_))

# 总结: 不可变对象的赋值语句,一样传递的是id,

# 但是内存中对象的value值是不能单独通过索引操作改变的,

# 相当于内存中的 对象id和对象value是绑定的,

# 每一个等值的value都有一个对应的相同id,