0%

是地址引用还是赋值操作

基本类型

凡是基本类型,都是赋值。

1
2
3
4
5
a = 1

b = None

c = True

复合类型

若是复合类型,都是地址指向。

函数和类的赋值也是地址指向

1
2
3
4
5
a = [1,2,3]

b = {'a':1, 'b':1}

c = 函数,类

验证方法

直接用id()看地址引用,如果原始对象改变后,其id()和赋值对象的id()不再一致,则为赋值,反之则是引用。

  • 验证基本类型:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    >>> a = 3
    >>> b = a
    >>> id(a)
    9413248
    >>> id(b)
    9413248
    >>> a = 4
    >>> id(a)
    9413280
    >>> id(b)
    9413248

    给a第二次更变赋值为4后,b的id()和a的id()不同,所以是赋值

  • 验证复合类型:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    >>> a = [1,2,3]
    >>> b = a
    >>> b
    [1, 2, 3]
    >>> id(a)
    140435242878376
    >>> id(b)
    140435242878376
    >>> a.append(1)
    >>> id(a)
    140435242878376
    >>> id(b)
    140435242878376

    给a第二次更变赋值为4后,b的id()和a的id()相同,所以是地址引用。下面的类的例子也能看出是地址引用。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class A(object):
def test(self):
pass

a = A()
b = a
print(id(a))
print(id(b))
a.value = 1
print(id(a))
print(b.value)


140233133844240
140233133844240
140233133844240
1
坚持原创技术分享,您的支持将鼓励我继续创作!