标签:res 引用 erro zha 注意 变化 影响 err []
在python中
注意:如果变量已经被定义,当给一个变量赋值的时候,本质上是自改了数据的引用;即变量不再对之前的数据引用;变量改为对新赋值的数据引用。
a = 1
id(a)
140721952793280
id(1)
140721952793280
b = a
id(b)
140721952793280
a = 2
id(a)
140721952793312
id(b)
140721952793280
b = a
id(b)
140721952793312
b = 2
id(b)
140721952793312
我们可以把变量的名字理解为便签纸,而变量名和数据就相当于把便签纸贴在数据上;
当我们a = b时,就是把a,b两张标签纸贴在了同一个数据上,而如果我们把a重新赋值,就是把a的便签纸撕下来贴在另一个数据上,但b的便签纸位置不变;
函数参数的传递,实际传送的是对应实参变量的引用,而不是实参保存的数据;
def test(num):
print("在函数内部%d对应的内存地址是%s" % (num, id(num)))
a = 10
print("a 变量保存数据的内存地址是 %s" % id(a))
test(a)
# a 变量保存数据的内存地址是 140722085962720
# 在函数内部10对应的内存地址是140722085962720
函数的返回值同样也是返回变量的引用,而不是真实的数据;
数据地址本质上就是一个数字;
def test(num):
result = "test_password"
print("函数内返回值result的内存地址是 %s" % id(result))
return result
a = 10
r = test(a)
print("返回的 %s 的内存地址是 %s" % (r, id(r)))
# 函数内返回值result的内存地址是 2333111002800
# 返回的 test_password 的内存地址是 2333111002800
修改可变类型 是修改数据的内容,而不会修改变量引用的地址;修改可变类型,要用对象.方法()进行修改;
重新赋值会修改变量引用的地址;
不可变类型,内存中的数据不允许被修改:
可变类型,内存中的数据可以被修改:
可变类型比如列表,字典,对它们进行数据修改时,不会对引用的内存地址造成影响;
只有当我们对变量进行重新赋值之后,才会影响引用;
下面举例仅举列表的例子,字典一样,就不赘述了。
# 列表数据修改和重赋值对引用的影响
a = [1,2,3]
id(a)
1956997579272
a.append(4)
a
[1, 2, 3, 4]
id(a)
1956997579272
a.remove(2)
a
[1, 3, 4]
id(a)
1956997579272
a.clear()
a
[]
id(a)
1956997579272
a = ['a','s','d']
id(a)
1956997945160
字典的key只能使用不可变类型;
注意:可变类型的数据变化,是通过方法来是实现的;
d = {}
d["name"] = "zhangsan"
d
{'name': 'zhangsan'}
d[1] = "整数"
d
{'name': 'zhangsan', 1: '整数'}
d[(1,)] = "元组"
d
{'name': 'zhangsan', 1: '整数', (1,): '元组'}
d[[1,2,3]] = "列表"
Traceback (most recent call last):
File "<input>", line 1, in <module>
TypeError: unhashable type: 'list'
d[{"age":18}] = "字典"
Traceback (most recent call last):
File "<input>", line 1, in <module>
TypeError: unhashable type: 'dict'
哈希算法,只能哈希不可变类型;
因为字典的key要使用哈希,所以,字典的key只能是不可变类型;
hash(1)
1
hash("hello")
2061306992742373012
hash("hello python")
9189581639312291988
hash((1,2))
3713081631934410656
hash([1,2])
Traceback (most recent call last):
File "<input>", line 1, in <module>
TypeError: unhashable type: 'list'
hash({"age":18})
Traceback (most recent call last):
File "<input>", line 1, in <module>
TypeError: unhashable type: 'dict'
标签:res 引用 erro zha 注意 变化 影响 err []
原文地址:https://www.cnblogs.com/yifchan/p/python-1-10.html