lists aliasing g mutability
play

Lists, Aliasing, g, Mutability Kelly Rivers and Stephanie Rosenthal - PowerPoint PPT Presentation

Lists, Aliasing, g, Mutability Kelly Rivers and Stephanie Rosenthal 15-110 Fall 2019 Announcements Homework 3 Check-in 2 is due Monday at 12-noon! Start Early! Homework 3 full is also due in 2 Mondays. Learning Objectives To define


  1. Lists, Aliasing, g, Mutability Kelly Rivers and Stephanie Rosenthal 15-110 Fall 2019

  2. Announcements • Homework 3 Check-in 2 is due Monday at 12-noon! Start Early! • Homework 3 full is also due in 2 Mondays.

  3. Learning Objectives • To define mutable and alias • To distinguish mutable types from immutable types. • To trace the values of variables by understanding their mutability and aliases • To create 2D lists and iterate through them

  4. Lists Lists represent sequences, in order, of data We can define, add, remove, combine, edit, iterate over lists. X = [1,2,3,4,5,6,7] What is happening in memory? How can we keep adding/removing?

  5. Lists and Memory ry X = [1,2,3,4,5,6,7] A variable points to a large place in memory designated for the list Variable List X Memory 1 2 3 4 5 6 7

  6. Lists and Memory ry X = [1,2,3,4,5,6,7] A variable points to a large place in memory designated for the list This space allows it to add and remove values without running out Variable List X Memory 1 2 3 4 5 6 7

  7. Lists and Memory ry X = [1,2,3,4,5,6,7] Y = [1,2,3,4,5,6,7] #new list, new memory Python assumes you’ll want to edit them separately Variable List X Y Memory 1 2 3 4 5 6 7 1 2 3 4 5 6 7

  8. Lists and Memory ry X = [1,2,3,4,5,6,7] Y = X+[] #new list, new memory Python assumes you’ll want to edit them separately Variable List X Y Memory 1 2 3 4 5 6 7 1 2 3 4 5 6 7

  9. Aliasing X = [1,2,3,4,5,6,7] Y = X Setting another variable equal just points to the same address in memory Variable List X Y Memory 1 2 3 4 5 6 7

  10. Modify fying Lists with Aliasing We can directly add or remove an item to/from a list! L = [1,2,3,4,5,6,7,8,9] L.append(10) #10 gets inserted at the end of the list L.remove(5) #5 gets removed from the list L.remove(5) #nothing happens, there is not a second 5 L.insert(4,5) #insert 5 at index 4 of the list

  11. List Behavior with Aliasing vs Separate Copy X = [1,2,3,4,5,6,7] Y = [1,2,3,4,5,6,7] #new list, new memory Z = X X.remove(3) print(X) print(Y) print(Z) What wil ill l the li lists lo look li like?

  12. List Behavior with Aliasing vs Separate Copy X = [1,2,3,4,5,6,7] Y = [1,2,3,4,5,6,7] #new list, new memory Z = X Variable List X Y Z Memory 1 2 3 4 5 6 7 1 2 3 4 5 6 7

  13. List Behavior with Aliasing vs Separate Copy X = [1,2,3,4,5,6,7] Y = [1,2,3,4,5,6,7] #new list, new memory Z = X X.remove(3) Variable List X Y Z Memory 1 2 4 5 6 7 1 2 3 4 5 6 7

  14. Checking Memory Locations id(X) will return the memory location of the variable X If id(X) == id(Y) then the variables are aliased Otherwise, the values of the data are in separate memory locations

  15. Aliasing Takeaways Be careful if you are using lists and creating aliases vs copies You may expect a list to change and it doesn’t or vice versa Use the one that is correct for your algorithm/application

  16. Why are copies different than aliases? Lists are mutable le – you can change the value of a list without changing its memory location Insert, Append, and Remove all change the list in its location Aliases point to the same location in memory, so they edit the same list. Copies point to different locations in memory, so the lists are not the same.

  17. Why are copies different than aliases? Lists are mutable le – you can change the value of a list without changing its memory location Insert, Append, and Remove all change the list in its location Aliases point to the same location in memory, so they edit the same list. Copies point to different locations in memory, so the lists are not the same. Not all data types are mutable. The opposite of mutable is im immutable le.

  18. Are Strings Mutable? S = "15" print(id(S)) S = S+"-110" print(id(S)) Do they print the same value?

  19. Are Strings Mutable? S = "15" S print(id(S)) Before + After + S = S+"-110" 1 5 1 5 - 1 1 0 print(id(S)) Strings are immutable. Each string is stored in a separate location in memory.

  20. Are In Integers and Floats Mutable? S = 15 print(id(S)) T = S S = S+1 print(id(S)) print(id(T)) print(S,T) Do they have the same id? Do they have the same value?

  21. Are In Integers and Floats Mutable? S = 15 S T print(id(S)) Before + After + Always T = S 15 16 S = S+1 print(id(S)) print(id(T)) print(S,T) Numbers are im immutable. There is a separate location in the program for each.

  22. Swapping Variable Values S = 5 S T T = 10 Temp = S 10 5 S = T T = Temp

  23. Swapping Variable Values S = 5 S Temp T T = 10 Temp = S 10 5 S = T T = Temp

  24. Swapping Variable Values S = 5 S Temp T T = 10 Temp = S 10 5 S = T T = Temp

  25. Swapping Variable Values S = 5 S Temp T T = 10 Temp = S 10 5 S = T T = Temp

  26. Swapping List Values L = [1,2,3,4,5,6,7] L Temp = L[1] L[1] = L[2] 1 2 3 4 5 6 7 L[2] = Temp

  27. Swapping List Values L = [1,2,3,4,5,6,7] L Temp = L[1] L[1] = L[2] L[2] = Temp 1 2 3 4 5 6 7

  28. Swapping List Values L = [1,2,3,4,5,6,7] Temp L Temp = L[1] L[1] = L[2] L[2] = Temp 1 2 3 4 5 6 7

  29. Swapping List Values L = [1,2,3,4,5,6,7] Temp L Temp = L[1] L[1] = L[2] L[2] = Temp 1 2 3 4 5 6 7

  30. Swapping List Values L = [1,2,3,4,5,6,7] Temp L Temp = L[1] L[1] = L[2] L[2] = Temp 1 2 3 4 5 6 7

  31. 2D Lists Now that we understand L what’s going on, it’s easier to understand different ways that Indexes represent row numbers we can use lists. 5 Indexes represent column numbers Example: 7 We can make lists of lists 6 2 1

  32. It Iterating through 2D Lists for i in L: L for j in i: print(j) Indexes represent row numbers for i in range(len(L)): 5 for j in range(len(L[i])): 7 print(L[i][j]) 6 Note: 2 L[i] is a list L[i][j] is an index in L[i ]’s list 1

Recommend


More recommend