0% found this document useful (0 votes)
12 views5 pages

15 Mutability 4pp

Uploaded by

Kaphun Krub
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
12 views5 pages

15 Mutability 4pp

Uploaded by

Kaphun Krub
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 5

Mutability Announcements

Objects

• Objects represent information


• They consist of data and behavior, bundled together to create abstractions
• Objects can represent things, but also properties, interactions, & processes
• A type of object is called a class; classes are first-class values in Python
• Object-oriented programming:
Objects
• A metaphor for organizing large programs
• Special syntax that can improve the composition of programs
• In Python, every value is an object
• All objects have attributes
• A lot of data manipulation happens through object methods
(Demo) • Functions do one thing; objects do many related things

4
Representing Strings: the ASCII Standard
American Standard Code for Information Interchange

"Bell" (\a) "Line feed" (\n)

0 0 0

8 rows: 3 bits
0 0 1
0 1 0

Example: Strings 0 1 1
1 0 0
1 0 1
1 1 0
1 1 1

16 columns: 4 bits

• Layout was chosen to support sorting by character code


• Rows indexed 2-5 are a useful 6-bit (64 element) subset
(Demo) • Control characters were designed for transmission
(Demo)
6

Representing Strings: the Unicode Standard

• 137,994 characters in Unicode 12.1


• 150 scripts (organized)
• Enumeration of character properties,
such as case
• Supports bidirectional display order
• A canonical name for every character Mutation Operations

http://ian-albert.com/unicode_chart/unichart-chinese.jpg

'⚅' '♪'
LATIN CAPITAL LETTER A

DIE FACE-6

EIGHTH NOTE (Demo)

7
Some Objects Can Change Mutation Can Happen Within a Function Call

[Demo] A function can change the value of any object in its scope

First example in the course of an object changing state >>> four = [1, 2, 3, 4] def mystery(s): or def mystery(s):
>>> len(four) s.pop() s[2:] = []
The same object can change in value throughout the course of computation 4 s.pop()
>>> mystery(four)

👶
👧
👩
👵
jessica >>> len(four)
same_person 2

Unicode
OLDER character
WOMAN
BABY
GIRL name >>> four = [1, 2, 3, 4] def another_mystery():
WOMAN
>>> len(four) four.pop()
4 four.pop()
All names that refer to the same object are affected by a mutation >>> another_mystery() # No arguments!
>>> len(four)
Only objects of mutable types can change: lists & dictionaries 2

{Demo}

9 10
pythontutor.com/composingprograms.html#code=def%20mystery%28s%29%3A%0A%20%20%20%20s.pop%28%29%0A%20%20%20%20s.pop%28%29%0A%0Afour%20%3D%20[1,%202,%203,%204]%0Amystery%28four%29&mode=display&origin=composingprograms.js&cumulative=true&py=3&rawInputLstJSON=[]&curInstr=0

Tuples are Immutable Sequences

Immutable values are protected from mutation

>>> turtle = (1, 2, 3) >>> turtle = [1, 2, 3]


>>> ooze() >>> ooze()
>>> turtle >>> turtle
(1, 2, 3) ['Anything could be inside!']

The value of an expression can change because of changes in names or objects


Tuples
>>> x = 2 >>> x = [1, 2]
>>> x + x >>> x + x
4 [1, 2, 1, 2]
Name change: Object mutation:
>>> x = 3 >>> x.append(3)
>>> x + x >>> x + x
6 [1, 2, 3, 1, 2, 3]

An immutable sequence may still change if it contains a mutable value as an element

>>> s = ([1, 2], 3) >>> s = ([1, 2], 3)


(Demo) >>> s[0] = 4 >>> s[0][0] = 4
ERROR >>> s
([4, 2], 3)
12
Sameness and Change
• As long as we never modify objects, a compound object is just the totality of its pieces

• A rational number is just its numerator and denominator

• This view is no longer valid in the presence of change

• A compound data object has an "identity" in addition to the pieces of which it is composed

• A list is still "the same" list even if we change its contents


Mutation • Conversely, we could have two lists that happen to have the same contents, but are different

>>> a = [10] >>> a = [10]


>>> b = a >>> b = [10]
>>> a == b >>> a == b
True True
>>> a.append(20) >>> b.append(20)
>>> a >>> a
[10, 20] [10]
>>> b >>> b
[10, 20] [10, 20]
>>> a == b >>> a == b
True False
14

Identity Operators Mutable Default Arguments are Dangerous

Identity A default argument value is part of a function value, not generated by a call

<exp0> is <exp1> >>> def f(s=[]):


... s.append(3)
evaluates to True if both <exp0> and <exp1> evaluate to the same object ... return len(s)
...
>>> f()
Equality 1
>>> f()
<exp0> == <exp1> 2 Each time the function
>>> f() is called, s is bound
3 to the same value!
evaluates to True if both <exp0> and <exp1> evaluate to equal values

Identical objects are always equal values

(Demo)

15 16
pythontutor.com/composingprograms.html#code=def%20f%28s%3D[]%29%3A%0A%20%20%20%20s.append%283%29%0A%20%20%20%20return%20len%28s%29%0A%20%20%20%20%0Af%28%29%0Af%28%29%0Af%28%29&mode=display&origin=composingprograms.js&cumulative=true&py=3&rawInputLstJSON=[]&curInstr=0
A Function with Behavior That Varies Over Time

Let's model a bank account that has a balance of $100

In a (mutable) list
referenced in the parent
>>> withdraw = make_withdraw_list(100) frame of the function

Argument:
Return value: >>> withdraw(25) amount to withdraw
Mutable Functions remaining balance 75

>>> withdraw(25) Second withdrawal of


Different 50 the same amount
return value!
>>> withdraw(60)
'Insufficient funds'

>>> withdraw(15) Where's this balance


35 stored?

18

Mutable Values & Persistent Local State

It changes the contents


of the b list

withdraw doesn't
reassign any name
within the parent Name bound
outside of
withdraw def

Element
assignment
changes a list

19

You might also like