Інформатика

Безкоштовно

Ніхто не записаний

П82. Вказівники

Виконати вправу

Прочитайте!

Вказівник — це тип даних, який використовується для зберігання адрес змінних і об’єктів. Адреса містить номери комірок пам’яті або спеціальне значення (часто нульове), яке свідчить про те, що звернення до комірки пам’яті не може бути виконано. Якщо вказівник містить будь-яку адресу, то кажуть, що він посилається на відповідний об’єкт.

У мовах із динамічною типізацією даних, якою є мова Python, наявна суттєва відмінність — змінні не оголошуються, а вказівник присвоюється об’єктам. Вказівники не мають типу, тип мають об’єкти, на які вони посилаються. Пояснимо сутність вказівників мови Python на прикладі:

Припустимо, що для обчислення уводиться вираз 8**3. Спочатку в комірки пам’яті заносяться значення 8 і 3, потім обчислюється вираз 8**3 і значення 512 також буде збережено в комірці. Це значення буде виведено на екран і зміст усіх цих комірок буде стерто. Отже, у мові Python автоматично збирається сміття, тобто пам’ять звільняється від усього, що не використовується.

Щоб зберегти об’єкт у пам’яті, потрібно встановити на нього вказівник. Як уже зазначалося, іменування об’єктів реалізується за допомогою оператора присвоювання (наприклад, zmk = 21). Водночас літерал 21 створює в пам’яті об’єкт типу int(), а zmk є вказівником на цей об’єкт.

Таким чином, 21 — це реально існуючий об’єкт зі власними атрибутами, а zmk — вказівник на нього. Якщо після цього виконати zmk = ’21’, то буде створено об’єкт str(‘21’), на який посилається вказівник zmk, а попередній об’єкт 21 буде видалено з пам’яті.

Розпізнати тип об’єкта, на який посилається цей вказівник, можна за допомогою функції type(zmk).

Посилання та ідентифікатор об’єкта

Коли ми створюємо змінну в Python, вона отримує посилання на об’єкт у пам’яті:

a = [1, 2, 3] # ‘a’ посилається на список
b = a # ‘b’ також посилається на той самий список

В цьому випадку a і b вказують на один і той самий об’єкт у пам’яті. Перевірити адресу об’єкта можна за допомогою функції id():

print(id(a)) # Наприклад, 140428756563968
print(id(b)) # Той самий ідентифікатор, що і у ‘a’

Змінні як посилання

Python використовує автоматичне керування пам’яттю та збірку сміття, що спрощує роботу з пам’яттю. Однак важливо розуміти, що змінні в Python працюють як посилання.

a = [10, 20, 30]
b = a
b.append(40)

print(a) # Виведе: [10, 20, 30, 40]
print(b) # Виведе: [10, 20, 30, 40]

Оскільки b і a посилаються на один і той самий об’єкт у пам’яті, зміни через b впливають на a.

Копіювання об’єктів

Щоб створити незалежну копію об’єкта, потрібно використовувати метод .copy() або модуль copy:

import copy

a = [1, 2, 3]
b = a.copy() # Поверхневе копіювання
c = copy.deepcopy(a) # Глибоке копіювання

Працюємо за ПК!

Задача 1. Створіть проєкт Квадрати значень, у якому елементи табличної величини а, яка містить 10 цілих чисел, змінюються їх квадратами.

Задача 2. На тренуванні у стрибках у висоту тренер усі дані, які менші, ніж особистий рекорд вихованця чи вихованки, обнуляє. Виведіть список можливих результатів, якщо спортсмен або спортсменка має особистий рекорд у стрибках у висоту a см. Зауважте, що рекорд у юнацьких змаганнях з результатом 194 см установила в 2018 р. бронзова призерка Олімпійських ігор 2020 Ярослава Могучіх.

Спортсмен або спортсменка робить 10 спроб, формуючи список результатів (дані отримуються випадковим чином з деякого діапазону). Створіть проєкт Результати тренувань, у якому елементи списку list, які менші від заданого значення, будуть замінюватись нулями.

Задача 3. Створіть проєкт, у якому створюється одновимірний масив (список) з банківських вкладів n клієнтів. Через рік вклад кожного збільшується на 10 %. Виведіть суми, які зможуть забрати ці клієнти через рік. Збережіть проєкт.

Задача 4. У   двовимірному   масиві   [[12,  41,  53,  49], [8, 12, 45, 5],[67, 23, 35, 45]] визначте максимальний елемент у кожному рядку.

Задача 5. При виконанні лабораторного експерименту з фізики учні отримали десять дійсних чисел з діапазону 9,0–10,0. Складіть проєкт Середнє для обчислення середнього значення результатів експерименту.

 

0.00 на основі 0 рейтингів

5 зірок
0%
4 зірок
0%
3 зірок
0%
2 зірок
0%
1 зірок
0%